当前位置: 首页 > news >正文

记一次monolog的RotatingFileHandler使用

需求如下:

1.需要一种日记格式,能把同一次请求的日记归在一起,请求间的日记以空行隔开,即使并发操作也不会像laravel默认的日记一样很"被动"的记录(不同请求的日记可能被交替记录).

2.还应该像laravel日记的daily驱动那样,把每天的日记都新建一个文件,并删除旧日记.

--------------------------------------------------

参考一篇文章与laravel日记文档:

https://learnku.com/articles/3567/monolog-optimization-and-elk-friendly-log-format

https://learnku.com/docs/laravel/5.6/logging/1374#creating-custom-channels

文章用的是monolog的BufferHandler继承自StreamHandler的自定义Handler(参考monolog文档),这样可以实现需求1,但是要实现需求2,自定义Handler应该继承自RotatingFileHandler.

要特别注意,调用RotatingFileHandler的write(array $record)方法时,$record一定要有键名为'datetime'的键值对(参考文章传入['formatted'=>$log],我传入['formatted'=>$log, 'datetime'=>\Datetime('now')]).

因为追溯monolog的源码,RotatingFileHandler的write()方法需要在记录日志时根据传入的datetime来判断是否该rotate(即清除过期日记),不传datetime则write()会抛异常,但是日记不是在请求进程中进行的,所以请求能正常被响应(前端不会看到500),但是会发现日记那边却没有任何反应.monolog文档只有StreamHandler的示例,写的有些简单...

 monolog跑通后,只用在laravel的config/logging中自定义一个channel(custom驱动),并via刚刚跑通的自定义Handler即可.

 

转载于:https://www.cnblogs.com/SHQHDMR/p/10364100.html

相关文章:

  • pandas中的iloc和loc的区别
  • iOS-多个UIScrollView滑动嵌套(仿微博、抖音、网易云个人详情页)
  • python3基础-字符串
  • 小李飞刀:SQL题目刷起来!
  • CentOS中制作本地yum源
  • 77. Combinations
  • CUDA学习(七)
  • docker同宿主机容器和不同宿主机容器之间怎么通信?
  • Android自定义搜索框,封装了 历史搜索记录功能和样式
  • VuePress 静态网站生成
  • Android中View内部类MeasureSpec研究
  • Java多线程父子线程关系 多线程中篇(六)
  • 使用Nginx、Nginx Plus抵御DDOS攻击
  • 前嗅ForeSpider中数据浏览界面介绍
  • NPOI 笔记
  • 【Linux系统编程】快速查找errno错误码信息
  • 【笔记】你不知道的JS读书笔记——Promise
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • GitUp, 你不可错过的秀外慧中的git工具
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • PhantomJS 安装
  • Python进阶细节
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Web标准制定过程
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 聚簇索引和非聚簇索引
  • 前端相关框架总和
  • 区块链技术特点之去中心化特性
  • 如何设计一个微型分布式架构?
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 数据可视化之下发图实践
  • "无招胜有招"nbsp;史上最全的互…
  • # C++之functional库用法整理
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (五)MySQL的备份及恢复
  • (一)appium-desktop定位元素原理
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/C# 使用反射注册事件
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET企业级应用架构设计系列之应用服务器
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ;号自动换行
  • [ C++ ] STL_list 使用及其模拟实现
  • [ NOI 2001 ] 食物链