需求如下:

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即可.

最新文章

  1. 什么才是正确的javascript数组检测方式
  2. SharePoint回环检查(Loopback Check)相关问题
  3. C 语言中用bsearch()实现查找操作
  4. .Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】
  5. ubuntu 设置静态ip
  6. Poj 2255 Tree Recovery(二叉搜索树)
  7. Stripe
  8. .net: 不能忽视的break——寻找VS2010和VS2012编译器的一个小区别
  9. linux基础-安装篇
  10. solidity高级理论(三):时间单位与view
  11. iptables防火墙设置
  12. 20145320《网络对抗》注入Shellcode并执行
  13. 解决Tomcat v6.0 Server at localhost was unable to start within 45 seconds
  14. rlwrap与历史命令
  15. CSS快速入门-前端布局2(唯品会1)
  16. mongodb分片集群
  17. 【commons-io】File对文件与目录的处理&FileUtis,IOUtils,FilenameUtils工具的使用
  18. python 字符串压缩
  19. IDEA无法下载plugin的解决办法
  20. js 继承介绍

热门文章

  1. docker(基础篇)
  2. 《Self-Attention Generative Adversarial Networks》里的注意力计算
  3. [ZZ] 多领域视觉数据的转换、关联与自适应学习
  4. 使用LFSR搭建误差补偿系统
  5. MariaDB——(二) MariaDB 10.0.15 日志文件—undo 日志
  6. ignoreDependencyType(Class class)方法使用
  7. primo驱动启动顺序
  8. Kong(v1.0.2)认证
  9. Java核心-多线程-并发控制器-Exchanger交换器
  10. 一个故事带你理解if __name__ == '__main__'