• ThinkPHP接入log4php日志监控系统


    一、配置常量

       1、LOG_4_PHP 

           常量LOG_4_PHP表示thinkphp中是否记录日志标识

           默认为FALSE,LOG_4_PHP =TRUE时表示已log4php格式记录日志,其中thinkphp中的日志记录未做任何修改

       2、PUBLIC_PATH

          表示thinkphp中公共文件建Plubic的路径

          需在thinkphp入口文件inedx.php配置define('PUBLIC_PATH',__DIR__.'/Public/'); 

          注:暂定设置Plubic文件夹的路径,若对系统有影响,可进行修改优化

    二、引入文件

        1、将附件中log4php文件夹引入thinkphp框架中的Vendor(thinkphp引入外部类存放位置)文件夹下(ThinkPHP/Library/);

        2、将附件中resources文件夹引入thinkphp框架中Public文件夹下;

              其中resources文件下的AppenderRollingFile.xml为log4php配置文件,其配置方法如下:

              配置文件格式: 

                 <param name="ConversionPattern" value="[系统简称] [%logger] [%date{Y-m-d H:i:s,u}] [%-5p] %l - %message^^%newline"/>

              配置文件位置:

                  <param name="file" value="/u02/logs/tp.log" />

              配置文件最大值:
                  <param name="maxFileSize" value="100MB" />

             具体配置格式详见AppenderRollingFile.xml

    三、修改thinkphp日志类

        1、修改thinkphp框架中的Log.class.php(ThinkPHP/Library/Think/):

             将类中的save()方法“$message = implode('',self::$log);“行进行隐藏,同时将“self::$storage->write($message,$destination);”修改为

             “self::$storage->write(self::$log,$destination);”

        2、修改thinkphp框架中的File.class.php(ThinkPHP/Library/Think/Log/Driver/):

              将类中的write()方法改写为:

             /**
               * 日志写入接口
               * @access public
               * @param array $log 日志信息
               * @param string $destination 写入目标
               * @return void
            */
            public function write($log,$destination='') {
              $now = date($this->config['log_time_format']);
              if(empty($destination)){
                $destination = $this->config['log_path'].date('y_m_d').'.log';
              }
              // 自动创建日志目录
              $log_dir = dirname($destination);
              if (!is_dir($log_dir)) {
                mkdir($log_dir, 0755, true);
               } 
              //检测日志文件大小,超过配置大小则备份日志文件重新生成
              if(is_file($destination) && floor($this->config['log_file_size']) <= filesize($destination) ){
                rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
              }
              if (C("LOG_4_PHP")){
                Vendor('log4php.Logger');
                 Logger::configure(PUBLIC_PATH.'resources/AppenderRollingFile.xml');
                $logger = Logger::getLogger('THINKPHP_LOG');
                foreach ($log as $key => $value){
                   $info = json_encode($value);
                   $level = substr($value, 0, strpos($value, ':'));
                   if ($level == 'INFO' || $level == 'DEBUG' || $level == 'SQL'){
                      $logger->debug($info);
                   }elseif ($level == 'NOTIC' || $level == 'WARN'){
                      $logger->warn($info);
                   }elseif ($level == 'ERR' || $level == 'CRIT'){
                      $logger->error($info);
                   }elseif ($level == 'EMERG' || $level == 'ALERT'){
                      $logger->fatal($info);
                   }else{
                      $logger->info($info);
                   }
                }
            }
            $message = implode('',$log);
            error_log("[{$now}] ".$_SERVER['REMOTE_ADDR'].' '.$_SERVER['REQUEST_URI']."
    {$message}
    ", 3,$destination);
         }
  • 相关阅读:
    子程序定义-3
    子程序定义-2
    子程序定义-1
    MQ报 AMQ9259
    观nginx与lvs负载均衡的较量
    绑定变量值长度不一致,mismatch问题
    perl-printf 函数
    perl 运算符
    强制让SQL走谓词推入
    PGA概念
  • 原文地址:https://www.cnblogs.com/wangfengzhu/p/6612091.html
Copyright © 2020-2023  润新知