这是我的日志文件在2个请求后的样子:
[2019-03-16 01:20:57] request.INFO: some stuff happened
[2019-03-16 01:20:57] request.INFO: some stuff happened
[2019-03-16 01:21:17] request.INFO: some stuff happened
[2019-03-16 01:21:17] request.INFO: some stuff happened
有没有办法按每个请求分组日志消息,以便您可以直观地看到哪些属于一起?这不需要花哨。即使换行也可以:
[2019-03-16 01:20:57] request.INFO: some stuff happened
[2019-03-16 01:20:57] request.INFO: some stuff happened
[2019-03-16 01:21:17] request.INFO: some stuff happened
[2019-03-16 01:21:17] request.INFO: some stuff happened
我想让这个类型为fingers_crossed
的日志处理程序只触发错误,然后记录该请求的所有调试信息。
一些搜索产生的信息非常少。不幸的是,Monolog有一个不相关的“群体”概念,这使搜索结果变得混乱。
如果我理解正确,您希望在日志文件中有一个可视标记,用于标记请求的日志消息的结束,对吧?我能想象的最简单的解决方案是在请求周期结束时记录其他消息,例如:
$logger->debug('----------------------------------------------------------');
$logger->debug('END OF REQUEST');
$logger->debug('----------------------------------------------------------');
使用Symfony时,我会为调用记录器的kernel.finish_request
或kernel.terminate
添加一个事件处理程序。
如果你想从引导/事件处理代码中保留额外的日志调用,你可以编写自己的Monolog处理程序类来包装其他处理程序(有关包装处理程序的示例,请参阅BufferHandler
):
handle
会将消息传递给包装的处理程序。handleBatch
可以在传递之前将您的标记附加到批次的末尾close
还可以向包装的hadler发送最后一条日志消息。但是close
需要是幂等的,所以这可能会对这种情况造成问题。如果您的请求长时间运行并且它们的消息混合在日志文件中,请添加BufferHandler
以使它们分开。
如果要删除标记前面的其他日志信息(时间戳,源,严重性),我建议编写自己的格式化程序(包装/子类化LineFormatter),根据日志消息的不同,提供不同的输出请求“消息与否。在这种情况下,我建议不要将多条消息作为标记发送,而是发送一条消息并在格式化程序中定义标记格式。