Php Symfony独白';在FingersCrossAndler Q&;之后的s内省处理器日志记录;A.

Php Symfony独白';在FingersCrossAndler Q&;之后的s内省处理器日志记录;A.,php,symfony,monolog,Php,Symfony,Monolog,在monolog的fingers_Cross处理程序中,日志记录被保留,直到某个级别触发卸载/显示所有保留记录的日志记录。到目前为止,一切顺利 当这些被保留的消息在手指交叉触发后被转储时,您现在可能真的想知道所有的源代码行。(而不是在祈祷之前)。为此,将使用内省处理器——但是,正如其创建者指定的:“警告:只有处理程序直接处理日志时,这才有效。例如,如果将处理器放在FingerScrossHandler后面的处理程序上,则仅当达到触发器级别时才会调用处理器,并且所有日志记录都将具有相同的文件/行/

在monolog的fingers_Cross处理程序中,日志记录被保留,直到某个级别触发卸载/显示所有保留记录的日志记录。到目前为止,一切顺利

当这些被保留的消息在手指交叉触发后被转储时,您现在可能真的想知道所有的源代码行。(而不是在祈祷之前)。为此,将使用内省处理器——但是,正如其创建者指定的:“警告:只有处理程序直接处理日志时,这才有效。例如,如果将处理器放在FingerScrossHandler后面的处理程序上,则仅当达到触发器级别时才会调用处理器,并且所有日志记录都将具有相同的文件/行/。。来自触发FingerScrossHandler的呼叫的数据。“-不好!”

该问题是针对“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(..)
    }
}
在手指交叉触发后续处理程序后,现在插入正确的文件/行/类/函数信息

问:有没有办法让它成为我的Symfony框架的一部分,因此不在我的应用程序区域(AppBundle)中,但不涉及Symfony代码(例如,升级时丢失?)

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 }