symfony - 使用 Monolog 在 Symfony2 中记录 PHP fatal error

标签 symfony monolog

我需要一种方法来捕获 PHP fatal error (还有通知和警告)并使用 Monolog 记录它们。

我发现 Monolog 1.6+ 有 ErrorHandler::register() 方法,但我不知道如何在 Symfony2(生产)应用程序中使用它,以及如何在 config.yml 中正确配置它。

最佳答案

感谢@jenechka,他为我指明了正确的方向,我想我找到了解决方案:

服务.yml:

    vir.exception.listener:
    class: %vir.exception.listener.class%
    arguments: ["@logger"]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

错误处理程序:
<?php

namespace Mitecube\VoglioilruoloBundle\Listener;

use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Psr\Log\LoggerInterface;

class VoglioilruoloErrorHandler extends ErrorHandler {

    private $logger;
    private $prevErrorHandler;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
        $this->prevErrorHandler = set_error_handler(array($this, 'handle'));
        register_shutdown_function(array($this, 'handleFatal'));
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
    }

    public function handle($level, $message, $file = 'unknown', $line = 0, $context = array())
    {
        $this->logger->error($level . ": " . $message . " - in file " . $file . " - at line " . $line);
        return parent::handle($level, $message, $file, $line, $context);
    }

} 

通过这种方式,我能够将每个错误记录到独白中。我不认为这个解决方案可以被认为是“最佳实践”,所以我仍在寻找更好的解决方案。

关于symfony - 使用 Monolog 在 Symfony2 中记录 PHP fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22360083/

相关文章:

symfony - 如何在 Symfony 框架上的 Monolog 中设置日志时间戳的格式

symfony - 如何在生产中调试 symfony 错误 "Untrusted Host"

symfony - 如何将自定义条件添加到 Sonata 全局搜索功能

mysql - Symfony 3/Doctrine 是否为每位访问者打开一个 MySQL 连接?

php - 产品中的 symfony dev.log

php - 是否可以在 GAS 上使用 Monologues 并在 Stack Driver 中记录日志级别?

php - 使用 Monolog 记录完整的堆栈跟踪

php - Symfony2 + FOSUserBundle 注册表不提交,只重新加载

symfony - 将 Doctrine 2 结果对象(实体)转换为数组?

symfony - 使用 Symfony2 通过 API 使用用户密码进行身份验证