自定义Laravel (monolog)日志位置,并增加请求ID的实现
发布:smiling 来源: PHP粉丝网 添加日期:2022-01-08 15:31:01 浏览: 评论:0
今天小编就为大家分享一篇自定义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];
- }
- }
Tags: Laravel日志位置 monolog
相关文章
- ·Laravel 修改默认日志文件名称和位置的例子(2022-01-08)
- ·Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法(2021-10-25)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)