【问题标题】:Monolog FingersCrossedHandlerMonolog FingersCrossedHandler
【发布时间】:2012-11-08 16:30:02
【问题描述】:

我正在考虑在我正在开发的应用程序中使用独白,但我不确定是否能够使用 FingersCrosedHandler 实现我需要的功能。

如果添加了级别为 ERROR 或更高级别的消息,我只想记录 DEBUG 级别的消息,但是我希望在日志中查看 INFO 消息。

我试过了:

$applicationLog = new Monolog\Logger('App');
$streamHandler = new Monolog\Handler\StreamHandler(LOG_FILE, Monolog\Logger::DEBUG, false);
$fingersCrossedHandler = new Monolog\Handler\FingersCrossedHandler($streamHandler, Monolog\Logger::INFO, 0 , false);
$applicationLog->pushHandler($fingersCrossedHandler);
$applicationLog->addDebug('debug');
$applicationLog->addInfo('info');

但这会将调试和信息级别的消息添加到日志中。

这是否可以使用 FingersCrossedHandler 来实现,还是我需要自己创建?

【问题讨论】:

    标签: php monolog


    【解决方案1】:

    这在 Monolog 的 1.11.0 版本中进行了更改。现在有一个可选的第 6 个参数,$passThruLevel。此参数是应始终刷新的最低级别日志。在您的情况下,您应该按以下方式设置 FingersCrossed:

    use Monolog\Handler\FingersCrossedHandler;
    
    $fingersCrossedHandler = new FingersCrossedHandler(
        $streamHandler,
        Monolog\Logger::ERROR,
        0,
        true,
        true,
        Monolog\Logger::INFO
    );
    

    这将导致始终记录INFO 或更高级别的消息,但DEBUG 消息只有在记录ERROR 或更高级别的消息时才会显示。

    【讨论】:

      【解决方案2】:

      这对于 FingersCrossedHandler 本身是不可能的。您可以轻松地扩展它并覆盖 handle() 以便它仅缓冲调试消息并让其余消息始终通过。问题是如果你这样做,当错误发生时,你会得到消息乱序,除非你缓冲所有内容,最后刷新所有内容,如果没有发生错误则进行调试。

      【讨论】:

      • 好吧,看看 BufferHandler 或许看看如何在进程结束时自动刷新。
      猜你喜欢
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2018-04-30
      • 2016-04-09
      • 2014-11-04
      • 1970-01-01
      • 2019-08-07
      • 2015-08-30
      相关资源
      最近更新 更多