自定义Laravel (monolog)日志位置,并增加请求ID的实现
时间:2022-07-27
本文章向大家介绍自定义Laravel (monolog)日志位置,并增加请求ID的实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
修改 bootstrap/app.php 文件
$app- configureMonologUsing(function($monolog) use ($app) {
$monolog- pushHandler(
(new MonologHandlerRotatingFileHandler(
'/var/logs/app/laravel',
$app- make('config')- get('app.log_max_files', 5)
))- setFormatter(new MonologFormatterLineFormatter(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 的错误和日志记录
或者
创建appProvidersLogServiceProvider.php 文件
修改 configapp.php providers 增加
AppProvidersLogServiceProvider::class
然后 AppProvidersLogServiceProvider.php 内容如下
<?php
namespace AppProviders;
use IlluminateLogLogServiceProvider as SysServiceProvider;
use IlluminateLogWriter;
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 AppProviders;
use IlluminateSupportServiceProvider;
use CarbonCarbon;
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 MonologHandlerRotatingFileHandler(
$log_file ,
$log_max_files
))- setFormatter(new MonologFormatterLineFormatter( "[%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 AppProviders;
use IlluminateSupportServiceProvider;
use MonologFormatterLineFormatter;
use MonologHandlerRotatingFileHandler;
use CarbonCarbon;
use MonologLogger;;
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 MonologHandlerRotatingFileHandler
*/
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的实现就是小编分享给大家的全部内容了,希望能给大家一个参考。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- PCA算法原理及实现
- LeetCode题目27:移出元素
- LeetCode题目28:实现strStr()
- LeetCode题目29:两数相除
- LeetCode题目30:串联所有单词的子串
- LeetCode题目31:下一个排列
- LeetCode题目33:搜索旋转排序数组
- LeetCode题目34:在排序数组中查找元素的第一个和最后一个位置
- LeetCode题目35:搜索插入位置
- LeetCode题目36:有效的数独
- 你必须掌握动态规划——LeetCode题目5:最长回文子串
- 有意思的难题——LeetCode题目37:解数独
- 源码分析-分布式链路追踪:Skywalking存储插件能力-elasticsearch
- mongodb 4.0副本集搭建
- 浅析Kubernetes Pod重启策略和健康检查