Php 重写独白处理程序

Php 重写独白处理程序,php,symfony,Php,Symfony,我试图重写Monolog处理程序BrowserConsoleHandler来定制一些操作,但显然没有调用我的自定义静态方法。 我建议对于静态类,继承的类应该使用static::而不是self::来调用类方法,但即使临时修改基类:不调用我的子方法,也会调用超级方法 我创建了自定义处理程序 namespace MyBundle\Monolog; use Monolog\Handler\BrowserConsoleHandler as BaseBrowserConsoleHandler; class

我试图重写Monolog处理程序BrowserConsoleHandler来定制一些操作,但显然没有调用我的自定义静态方法。 我建议对于静态类,继承的类应该使用static::而不是self::来调用类方法,但即使临时修改基类:不调用我的子方法,也会调用超级方法

我创建了自定义处理程序

namespace MyBundle\Monolog;
use Monolog\Handler\BrowserConsoleHandler as BaseBrowserConsoleHandler;
class BrowserConsoleHandler extends BaseBrowserConsoleHandler {
    public static function generateScript(){
          // my custom operation that is not called :[
    }
...
然后,我在config.yml中将自定义处理程序添加为服务

services:
    browser_console_logger:
        class: Symfony\Bridge\Monolog\Logger
        arguments: [special]
        calls:
            - [pushHandler, [@browser_console_handler]]
    browser_console_handler:
        class: MyBundle\Monolog\BrowserConsoleHandler
然后我使用我的记录器:

    $logger = $this->get('browser_console_logger');
    $logger->info('hello console : ', [
        'foo' => 'bar'
    ]);
我在浏览器控制台中获取日志,但尚未调用我的子方法。。。 我在dev env中,缓存已清除。
我对symfony还不是很熟悉;-,我在这上面写了一些东西,但似乎我遗漏了一些东西…

我发现:在基类Monolog\Handler\BrowserConsoleHandler中,它来自方法链的调用方式,在我的例子中,generateScript由send调用,我将self::generateScript更改为static::generateScript。 但这还不够,send由调用

register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));
因此,类上下文是基础上下文,我们必须更改类名,才能将_称为_类 然后,上下文是我的子类,最后我必须在基类中修改所有private到protected,我认为如果基类是要继承的,那么它应该是这样才能正常工作的。所以这取决于独白团队,我会注意到他们