自定义Laravel (monolog)日志位置,并增加请求ID的实现_php实例_脚本之家


本站和网页 https://www.jb51.net/article/172184.htm 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

自定义Laravel (monolog)日志位置,并增加请求ID的实现_php实例_脚本之家
脚本之家
服务器常用软件
手机版
投稿中心
关注微信
快捷导航
软件下载
android
MAC
驱动下载
字体下载
DLL
源码下载
PHP
ASP.NET
ASP
JSP
软件编程
C#
JAVA
C 语言
Delphi
Android
网络编程
PHP
ASP.NET
ASP
JavaScript
在线工具
CSS格式化
JS格式化
Html转化为Js
数据库
MYSQL
MSSQL
oracle
DB2
MARIADB
CMS
PHPCMS
DEDECMS
帝国CMS
WordPress
常用工具
PHP开发工具
python
Photoshop
必备软件
网站首页
网页制作
网络编程
脚本专栏
脚本下载
数据库
服务器
电子书籍
操作系统
网站运营
平面设计
其它
媒体动画
电脑基础
硬件教程
网络安全
php基础
php技巧
php实例
php文摘
php模板
您的位置:首页 → 网络编程 → PHP编程 → php实例 → Laravel monolog位置增加请求ID
自定义Laravel (monolog)日志位置,并增加请求ID的实现
更新时间:2019年10月17日 11:36:54 作者:Webben
今天小编就为大家分享一篇自定义Laravel (monolog)日志位置,并增加请求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 内容如下
<&#63;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];
以上这篇自定义Laravel (monolog)日志位置,并增加请求ID的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:laravel日志优化实例讲解解决laravel中日志权限莫名变成了root的问题关于laravel 日志写入失败问题汇总Laravel 5.5 异常处理 & 错误日志的解决Laravel 重写日志,让日志更优雅
自定义
Laravel
monolog
日志
请求ID
相关文章
Thinkphp5框架实现获取数据库数据到视图的方法这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下 2019-08-08
Yii框架中 find findAll 查找出制定的字段的方法对比在yii框架中可以使用映射类的find方法取出一条数据或者用findall方法取出数条数据来,那么如何按照所需条件来取数据呢,主要用到了CDbCriteria这个类,这个类是yii自带的操作数据库的支持类 2014-09-09
深入理解PHP JSON数组与对象很多朋友很郁闷JSON数据中有时格式不定,一会儿是数组,一会儿是对象,怎么回事呢?下面小编给大家带来了php json数组与对象的相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧 2016-07-07
php如何用PDO操作大数据对象我们在使用数据库时,很少会向数据库中存储很大的内容字段。但是,MySQL 其实也为我们准备了这种类型的存储,只是我们平常用得不多而已。今天我们就来学习了解一下使用 PDO 如何操作 MySQL 中的大数据对象。 2021-06-06
yii实现model添加默认值的方法(2种方法)这篇文章主要介绍了yii实现model添加默认值的方法,结合实例分析了在rules()方法及在beforeSave()方法中设定两种实现技巧,需要的朋友可以参考下 2016-01-01
PHP中模拟链表和链表的基本操作示例这篇文章主要介绍了PHP中模拟链表和列表的基本操作示例,包括链表的增删查改等,说明基本上都包含在代码注释中,需要的朋友可以参考下 2016-02-02
php中实现记住密码下次自动登录的例子这篇文章主要介绍了php中实现记住密码下次自动登录的例子,本文使用cookie实现记住密码和自动登录功能,需要的朋友可以参考下 2014-11-11
Laravel 5框架学习之数据库迁移(Migrations)本文给大家介绍的是Laravel5框架中最强大的功能之一数据库迁移(database migrations),本文详细给大家介绍数据库迁移的步骤和方法,非常实用,有需要的小伙伴可以参考下。 2015-04-04
thinkphp5 URL和路由的功能详解与实例这篇文章主要介绍了thinkphp5 URL和路由的功能详解与实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-12-12
浅谈PHP中pack、unpack的详细用法这篇文章主要介绍了浅谈PHP中pack、unpack的详细用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-03-03
最新评论
大家感兴趣的内容
1php获取数组长度的方法(有实例)2PHP保留两位小数的几种方法3PHP错误Allowed memory size of 674微信公众平台实现获取用户OpenID的方法5教你如何使用php session6使用PHP生成二维码的两种方法(带logo图像)7PHP删除数组中空值的方法介绍8php发送get、post请求的6种方法简明总结9PHP中把stdClass Object转array的几个方10微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
最近更新的内容
laravel实现批量更新多条记录的方法示例Laravel中简约却不简单的Macroable宏指令详解Laravel利用gulp如何构建前端资源详解布隆过滤器(bloom filter)及php和redis实现布隆过滤器的方laravel框架数据库配置及操作数据库示例Yii 实现数据加密和解密的示例代码PHP中多线程的两个实现方法多个Laravel项目如何共用migrations详解php is_writable判断文件是否可写实例代码CodeIgniter多语言实现方法详解
常用在线小工具
微信
投稿
脚本任务
在线工具
关注微信公众号
关于我们 -
广告合作 -
联系我们 -
免责声明 -
网站地图 -
投诉建议 -
在线投稿
CopyRight 2006-2021 JB51.Net Inc All Rights Reserved. 脚本之家 版权所有