自定义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的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持黑区网络。
