I am looking into using monolog in an application I am working on but I am unsure whether I would be able to implement what I require using the FingersCrosedHandler.
I would like to only log DEBUG level messages if a message with a level of ERROR or higher is added, however I would like to see INFO messages in the log.
I have tried:
$applicationLog = new MonologLogger('App');
$streamHandler = new MonologHandlerStreamHandler(LOG_FILE, MonologLogger::DEBUG, false);
$fingersCrossedHandler = new MonologHandlerFingersCrossedHandler($streamHandler, MonologLogger::INFO, 0 , false);
$applicationLog->pushHandler($fingersCrossedHandler);
$applicationLog->addDebug('debug');
$applicationLog->addInfo('info');
But this adds both debug and info level messages to the log.
Is this possible to implement using the FingersCrossedHandler or would I need to create my own?
Advertisement
Answer
This was changed in version 1.11.0
of Monolog. There’s now an optional 6th parameter, $passThruLevel
. This parameter is the minimum level log that should always be flushed. In your case, you should set up FingersCrossed in the following manner:
use MonologHandlerFingersCrossedHandler;
$fingersCrossedHandler = new FingersCrossedHandler(
$streamHandler,
MonologLogger::ERROR,
0,
true,
true,
MonologLogger::INFO
);
This will result in INFO
or higher messages always being logged, but DEBUG
messages will only show up if an ERROR
level or higher message has been logged.