7

我正在研究在我正在开发的应用程序中使用独白,但我不确定是否能够使用 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 来实现,还是我需要自己创建?

4

2 回答 2

6

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

use Monolog\Handler\FingersCrossedHandler;

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

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

于 2018-03-10T06:36:07.520 回答
2

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

于 2012-11-20T19:28:24.877 回答