在FingersCrossedHandler Q& A

时间:2016-12-11 12:06:38

标签: php symfony monolog

在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代码(例如,升级会丢失?)

0 个答案:

没有答案