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.0これは、Monologのバージョンで変更されました。オプションの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 に答える