首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖Monolog Handler

覆盖Monolog Handler
EN

Stack Overflow用户
提问于 2014-04-28 14:55:49
回答 1查看 1.1K关注 0票数 1

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

我创建了我的自定义处理程序

代码语言:javascript
复制
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中将我的自定义处理程序添加为服务。

代码语言:javascript
复制
services:
    browser_console_logger:
        class: Symfony\Bridge\Monolog\Logger
        arguments: [special]
        calls:
            - [pushHandler, [@browser_console_handler]]
    browser_console_handler:
        class: MyBundle\Monolog\BrowserConsoleHandler

然后我用我的记录器:

代码语言:javascript
复制
    $logger = $this->get('browser_console_logger');
    $logger->info('hello console : ', [
        'foo' => 'bar'
    ]);

我在浏览器控制台中获得日志,但我的sub尚未被调用.我在dev env中,我的缓存是清楚的。我还没有很好地试验过symfony (还没有;-),我在这上面做了几件事,但似乎我在路上遗漏了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-29 10:22:04

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

代码语言:javascript
复制
register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));

因此,类上下文是基本上下文,我们必须将类名更改为get_called_class(),然后上下文是我的子类,最后我必须在基类中将所有private修改为protected,我认为如果要继承基类静态类,则应该像这样正确地工作。所以这是独立的团队,我会注意到他们的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23344364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档