自定义Laravel (monolog)日志位置,并增加请求ID的实现(2)
优化以后
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的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持黑区网络。