码迷,mamicode.com
首页 > 其他好文 > 详细

记一次monolog的RotatingFileHandler使用

时间:2019-02-12 10:27:50      阅读:458      评论:0      收藏:0      [点我收藏+]

标签:删除   mha   ast   追溯   ESS   驱动   via   laravel   使用   

需求如下:

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

 

记一次monolog的RotatingFileHandler使用

标签:删除   mha   ast   追溯   ESS   驱动   via   laravel   使用   

原文地址:https://www.cnblogs.com/SHQHDMR/p/10364100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!