自定义Laravel (monolog)日志位置,并增加请求ID的实现
网络编程 2021-07-04 23:05www.168986.cn编程入门
今天长沙网络推广就为大家分享一篇自定义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
参考
或者
创建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./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的实现就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程