在monolog的fingers_crossed处理程序中,日志记录被保留,直到某个级别触发卸载/显示所有那些保留记录。到目前为止,非常好。
当在fingers_crossed触发器之后转储那些隐藏的消息时,您现在可能真的想知道所有源代码行。 (而不是在指针交叉之前)。为此,使用了IntrospectionProcessor - 但是,正如其创建者指定:'警告:这仅在处理程序直接处理日志时才有效。例如,如果您将处理器放在FingersCrossedHandler后面的处理程序上,只有在达到触发级别时才会调用处理器,并且所有日志记录将从触发的调用中获得相同的文件/行/ ..数据FingersCrossedHandler。' - 不好!。
这个问题是针对'Laravel 5'类似的问题提出的,没有令人满意的答案。在这里,我提出了一个有效的Symfony(2/3)解决方案。
的src /的appbundle / IntrospectionPreprocessor.php:
<?php
namespace AppBundle;
class IntrospectionPreprocessor // ATTENTION TO THE 'PRE'
extends \Monolog\Processor\IntrospectionProcessor // SO USE THE ORIGINAL CLASS
{
public function processRecord(array $record)
{
return $this( $record ); // CALL TO ITS __INVOKE(..)
}
}
services.logger.yml:
services:
monolog.processor.introspection_patch:
class: AppBundle\IntrospectionPreprocessor
arguments: [ DEBUG, [Helper, Google] ] # FILTER OUT CLASSES THAT CONTAIN [..], similar to IntrospectionProcessor
tags:
- { name: monolog.processor, method: processRecord }
现在插入正确的文件/行/类/函数信息,AFTER fingers_crossed触发后续处理程序。
Q值。有没有办法正确地将它作为我的Symfony框架的一部分,所以不在我的应用程序区域(AppBundle),但是没有触及Symfony代码(例如,升级会丢失?)