Php 独白指法

Php 独白指法,php,monolog,Php,Monolog,我正在研究在我正在开发的一个应用程序中使用monolog,但我不确定是否能够使用FingersCrosedHandler实现我所需要的功能 如果添加了错误级别或更高级别的消息,我只希望记录调试级别的消息,但是我希望在日志中看到信息消息 我试过: $applicationLog = new Monolog\Logger('App'); $streamHandler = new Monolog\Handler\StreamHandler(LOG_FILE, Monolog\Logger::DEBUG

我正在研究在我正在开发的一个应用程序中使用monolog,但我不确定是否能够使用FingersCrosedHandler实现我所需要的功能

如果添加了错误级别或更高级别的消息,我只希望记录调试级别的消息,但是我希望在日志中看到信息消息

我试过:

$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');
但这会将调试和信息级别的消息添加到日志中


这是可以使用FingerScrossHandler实现的,还是我需要创建自己的?

这在FingerScrossHandler中是不可能的。您可以轻松地扩展它并重写handle(),这样它就只缓冲调试消息,而让其余的消息始终通过。问题是,如果您这样做,当出现错误时,您将使消息无序,除非您缓冲所有消息,并且在最后,如果没有发生错误,则刷新所有消息,但调试除外。

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

use Monolog\Handler\FingersCrossedHandler;

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

这将导致始终记录
INFO
或更高级别的消息,但是
DEBUG
消息仅在记录了
错误级别或更高级别的消息时才会显示。

好的,请查看BufferHandler,了解如何在进程结束时自动刷新。