自定义Laravel (monolog)日志位置,并增加请求ID的实现
修改bootstrap/app.php文件
$app->configureMonologUsing(function($monolog)use($app){ $monolog->pushHandler( (newMonolog\Handler\RotatingFileHandler( '/var/logs/app/laravel', $app->make('config')->get('app.log_max_files',5) ))->setFormatter(newMonolog\Formatter\LineFormatter(null,null,true,true)) ); });
添加以后写入日志文件为:
-rw-r--r--1webweb93Dec1815:52laravel-2017-12-17 -rw-r--r--1webweb279Dec1816:10laravel-2017-12-18
参考:Laravel的错误和日志记录
或者
创建app\Providers\LogServiceProvider.php文件
修改config\app.phpproviders增加
App\Providers\LogServiceProvider::class
然后App\Providers\LogServiceProvider.php内容如下
useFiles( '/var/logs/app/laravel.log', $this->logLevel() ); } protectedfunctionconfigureDailyHandler(Writer$log) { $log->useDailyFiles( '/var/logs/app/laravel.log',$this->maxFiles(), $this->logLevel() ); } }
增加请求IDrequestid
namespaceApp\Providers; useIlluminate\Support\ServiceProvider; useCarbon\Carbon; classLogServiceProviderextendsServiceProvider { protected$log_file; /** *Bootstrapanyapplicationservices. *@returnvoid */ publicfunctionboot() { // } /** *Registeranyapplicationservices. *@returnvoid */ publicfunctionregister() { $this->load_request_id(); $this->log_configure(); } /** *生成request_id *@returnvoid */ protectedfunctionload_request_id() { define('REQUEST_ID',config('app.log_prefix').Carbon::now()->timestamp); } /** *注册monologpushHandler *@returnvoid */ protectedfunctionlog_configure() { $log_file=$this->getLogFile(); $log_max_files=$this->getLogMaxFiles(); /** *@dochttps://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)) ); }); } protectedfunctiongetLogMaxFiles() { returnconfig('app.log_max_files',5); } /** *@returnmixed */ protectedfunctiongetLogFile() { if(is_null($this->log_file)) { $this->log_file=rtrim(config('app.log_path'),DIRECTORY_SEPARATOR)."/laravel.log"; } return$this->log_file; } }
优化以后
namespaceApp\Providers; useIlluminate\Support\ServiceProvider; useMonolog\Formatter\LineFormatter; useMonolog\Handler\RotatingFileHandler; useCarbon\Carbon; useMonolog\Logger;; useReflectionClass; classLogServiceProviderextendsServiceProvider { protected$log_file; /** *Bootstrapanyapplicationservices. * *@returnvoid */ publicfunctionboot() { // } /** *Registeranyapplicationservices. * *@returnvoid */ publicfunctionregister() { $this->loadRequestId(); /** *根据日期来分割日志 */ $this->useDailyFiles(); } protectedfunctionloadRequestId() { define('REQUEST_ID',config('app.log_prefix').Carbon::now()->timestamp); } /** *根据日期来分割日志 */ protectedfunctionuseDailyFiles() { $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); }); } /** *设置日志行格式 *@returnLineFormatter */ protectedfunctiongetDefaultFormatter() { $format="[%datetime%][".REQUEST_ID."]%channel%.%level_name%:%message%%context%%extra%\n"; returnnewLineFormatter($format,null,true,true); } /** *根据日志区分 *@return\Monolog\Handler\RotatingFileHandler */ protectedfunctiongetDailyHandler($level=Logger::DEBUG) { returnnewRotatingFileHandler( $this->logPath().$this->logName($level), $this->maxFiles(), $level ); } /** *日志文件最多个数 *@returnint */ protectedfunctionmaxFiles() { if($this->app->bound('config')){ return$this->app->make('config')->get('app.log_max_files',30); } return0; } /** *日志文件名称 *@returnmixed */ protectedfunctionlogPath() { $logPath=$this->app->storagePath()."/logs/"; if($this->app->bound('config')) { $logPath=$this->app->make('config')->get('app.log_path',$logPath); } return$logPath; } /** *log完整文件名 *@paramint$level *@returnstring */ protectedfunctionlogName($level=Logger::DEBUG) { return$this->getAppName().'-'.$this->getLevelName($level).".log"; } /** *获取项目app *@returnmixed */ protectedfunctiongetAppName() { return$this->app->make('config')->get('app.name'); } /** *获取log错误级别名称 *@param$level *@returnmixed */ protectedfunctiongetLevelName($level) { $r=newReflectionClass(Logger::class); $constants=array_flip($r->getConstants()); return$constants[$level]; } }
以上这篇自定义Laravel(monolog)日志位置,并增加请求ID的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。