• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    自定义Laravel (monolog)日志位置,并增加请求ID的实现

    修改 bootstrap/app.php 文件

    $app->configureMonologUsing(function($monolog) use ($app) {
     $monolog->pushHandler(
      (new Monolog\Handler\RotatingFileHandler(
       '/var/logs/app/laravel',
       $app->make('config')->get('app.log_max_files', 5)
      ))->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true))
     );
    });

    添加以后写入日志文件为:

    -rw-r--r-- 1 web web 93 Dec 18 15:52 laravel-2017-12-17
    -rw-r--r-- 1 web web 279 Dec 18 16:10 laravel-2017-12-18

    参考:Laravel 的错误和日志记录

    或者

    创建app\Providers\LogServiceProvider.php 文件

    修改 config\app.php providers 增加

    App\Providers\LogServiceProvider::class

    然后 App\Providers\LogServiceProvider.php 内容如下

    ?php
    
    namespace App\Providers;
    
    use Illuminate\Log\LogServiceProvider as SysServiceProvider;
    use Illuminate\Log\Writer;
    
    class LogServiceProvider extends SysServiceProvider
    {
     protected function configureSingleHandler(Writer $log)
     {
      $log->useFiles(
       '/var/logs/app/laravel.log',
       $this->logLevel()
      );
     }
    
     protected function configureDailyHandler(Writer $log)
     {
      $log->useDailyFiles(
       '/var/logs/app/laravel.log', $this->maxFiles(),
       $this->logLevel()
      );
     }
    }
    

    增加请求ID request id

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use Carbon\Carbon;
    
    class LogServiceProvider extends ServiceProvider
    {
     protected $log_file;
    
     /**
      * Bootstrap any application services.
      * @return void
      */
     public function boot()
     {
      //
     }
    
     /**
      * Register any application services.
      * @return void
      */
     public function register()
     {
      $this->load_request_id();
    
      $this->log_configure();
     }
    
     /**
      * 生成 request_id
      * @return void
      */
     protected function load_request_id()
     {
      define( 'REQUEST_ID' , config('app.log_prefix').Carbon::now()->timestamp );
     }
     
     /**
      * 注册 monolog pushHandler
      * @return void
      */
     protected function log_configure()
     {
      $log_file = $this->getLogFile();
      $log_max_files = $this->getLogMaxFiles();
    
      /**
       * @doc https://d.laravel-china.org/docs/5.4/errors#自定义-Monolog-设置
       */
      $this->app->configureMonologUsing(function($monolog) use ($log_file , $log_max_files) {
       $monolog->pushHandler(
        (new \Monolog\Handler\RotatingFileHandler(
         $log_file ,
         $log_max_files
        ))->setFormatter(new \Monolog\Formatter\LineFormatter( "[%datetime%] [".REQUEST_ID."] %channel%.%level_name%: %message% %context% %extra%\n", null, true, true))
       );
      });
     }
    
     protected function getLogMaxFiles()
     {
      return config('app.log_max_files' , 5);
     }
    
     /**
      * @return mixed
      */
     protected function getLogFile()
     {
      if( is_null( $this->log_file) )
      {
       $this->log_file = rtrim(config('app.log_path') , DIRECTORY_SEPARATOR )."/laravel.log";
      }
      return $this->log_file;
     }
    }
    

    优化以后

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use Monolog\Formatter\LineFormatter;
    use Monolog\Handler\RotatingFileHandler;
    use Carbon\Carbon;
    use Monolog\Logger;;
    use ReflectionClass;
    
    class LogServiceProvider extends ServiceProvider
    {
     protected $log_file;
    
     /**
      * Bootstrap any application services.
      *
      * @return void
      */
     public function boot()
     {
      //
     }
    
     /**
      * Register any application services.
      *
      * @return void
      */
     public function register()
     {
      $this->loadRequestId();
    
      /**
       * 根据日期来分割日志
       */
      $this->useDailyFiles();
    
     }
    
     protected function loadRequestId()
     {
      define( 'REQUEST_ID' , config('app.log_prefix').Carbon::now()->timestamp );
     }
    
     /**
      * 根据日期来分割日志
      */
     protected function useDailyFiles()
     {
      $handler = $this->getDailyHandler()->setFormatter( $this->getDefaultFormatter() );
    
      $errorHandler = $this->getDailyHandler(Logger::ERROR)->setFormatter( $this->getDefaultFormatter() );
    
      $this->app->configureMonologUsing( function( $monolog) use ( $handler , $errorHandler )
      {
       $monolog->pushHandler( $handler );
    
       $monolog->pushHandler( $errorHandler );
      });
     }
    
     /**
      * 设置 日志 行格式
      * @return LineFormatter
      */
     protected function getDefaultFormatter()
     {
      $format = "[%datetime%] [".REQUEST_ID."] %channel%.%level_name%: %message% %context% %extra%\n";
      return new LineFormatter( $format , null, true, true);
     }
    
    
     /**
      * 根据日志区分
      * @return \Monolog\Handler\RotatingFileHandler
      */
     protected function getDailyHandler( $level = Logger::DEBUG)
     {
      return new RotatingFileHandler(
       $this->logPath().$this->logName( $level ) ,
       $this->maxFiles() ,
       $level
      );
     }
    
     /**
      * 日志文件最多个数
      * @return int
      */
     protected function maxFiles()
     {
      if ($this->app->bound('config')) {
       return $this->app->make('config')->get('app.log_max_files', 30);
      }
    
      return 0;
     }
    
     /**
      * 日志文件名称
      * @return mixed
      */
     protected function logPath()
     {
      $logPath = $this->app->storagePath()."/logs/";
      if( $this->app->bound('config'))
      {
       $logPath = $this->app->make('config')->get('app.log_path', $logPath );
      }
      return $logPath;
     }
    
     /**
      * log 完整文件名
      * @param int $level
      * @return string
      */
     protected function logName( $level = Logger::DEBUG )
     {
      return $this->getAppName().'-'.$this->getLevelName( $level ).".log";
     }
    
     /**
      * 获取项目app
      * @return mixed
      */
     protected function getAppName()
     {
      return $this->app->make('config')->get('app.name');
     }
    
     /**
      * 获取log错误级别名称
      * @param $level
      * @return mixed
      */
     protected function getLevelName( $level )
     {
      $r = new ReflectionClass( Logger::class );
      $constants = array_flip( $r->getConstants() );
      return $constants[$level];
     }
    }
    

    以上这篇自定义Laravel (monolog)日志位置,并增加请求ID的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • laravel日志优化实例讲解
    • 解决laravel中日志权限莫名变成了root的问题
    • 关于laravel 日志写入失败问题汇总
    • Laravel 5.5 异常处理 & 错误日志的解决
    • Laravel 重写日志,让日志更优雅
    上一篇:详解Laravel设置多态关系模型别名的方式
    下一篇:关于laravel 日志写入失败问题汇总
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    自定义Laravel (monolog)日志位置,并增加请求ID的实现 自定义,Laravel,monolog,日志,