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']."\r\n{$message}\r\n", 3,$destination);
     }

posted on 2017-03-24 16:24  殊珠子  阅读(625)  评论(0编辑  收藏  举报

导航