laravel项目中如何自定义日志位置和增加请求ID
Admin 2022-06-17 群英技术资讯 861 次浏览
今天就跟大家聊聊有关“laravel项目中如何自定义日志位置和增加请求ID”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“laravel项目中如何自定义日志位置和增加请求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
参考:Laravel 的错误和日志记录
或者
创建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.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))
);
});
}
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];
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是有关php实现计数排序算法的内容,文本有实现思路以及示例,有需要的朋友可以参考一下,下面就一起跟随小编过来看看吧。
PHP开发环境搭建工具有哪一些?这篇文章主要给大家介绍一些PHP开发环境搭建工具,在学习PHP前,对PHP开发环境搭建工具了解也是有必要的,下面我们就一起来看一下。
php中 __clone的使用:1、用于对象复制。对象复制通过clone关键字来完成。2、__clone()方法不需要任何参数。3、在复制的同时,目标对象的某些属性与源对象的不同,可以在类里面定义一个__clone()方法。
php数组赋值方式:1、传递赋值是默认的传递方式,如果某个变量的值被赋予了另一个变量,那么改变其中一个的值对其他变量没有影响。2、引用赋值意味着新变量简单地引用原始变量,改变新变量值会影响原始变量值。
Swoole是一个由C语言编写,支持PHP语言的异步多线程服务器,它的功能包括异步TCP/UDP网络客户端,异步MySQL,异步 Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询等。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008