自定义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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。