我在香草PHP应用程序中使用Monolog。
我只想记录特定级别的错误-INFO和不在上面,因为我还有其他处理程序。
这是我的代码:
<?php
$logger = new Logger('mylogger');
$logger->pushHandler(new StreamHandler(__DIR__.'/log/errors.log', Logger::WARNING));
$logger->pushHandler(new StreamHandler(__DIR__.'/log/info.log', Logger::INFO));
有什么方法可以仅将INFO消息记录到info.log
?
今天我遇到了同样的问题,这使我来到了这里。无论如何,我通过使用Monologs FilterHandler解决了它。
FilterHandler允许您传入另一个处理程序作为参数,然后指定将触发该处理程序的最小和最大日志记录级别。
[few other handlers在特定情况下可能有用。
// Create the logging instance
$logger = new \Monolog\Logger('myLogger');
// Create error stream handler for error events and higher
$errorStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/error.log',
\Monolog\Logger::ERROR);
// Create info stream handler for info events and higher
$infoStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/Info.log',
\Monolog\Logger::INFO);
// Create filter handler to make sure info stream only logs info events
// Pass in the info handler
// Debug is the minimum level this handler will handle
// Info is the maximum level this handler will handle
$infoFilterHandler = new \Monolog\Handler\FilterHandler(
$infoStreamHandler,
\Monolog\Logger::DEBUG,
\Monolog\Logger::INFO);
// Add the handlers to logger
$logger->pushHandler($errorStreamHandler);
$logger->pushHandler($infoFilterHandler);
// Yay no errors in Info.log
$logger->addError("Some Error");
$logger->addInfo("Some Info");
更新Ali请参考\ Monolog \ Logger的source code查找可用的常量,然后将该常量分配给变量。
$someVar = \Monolog\Logger::INFO;
$infoStreamHandler = new \Monolog\Handler\StreamHandler(
'Some/DirectoryPath/Info.log',
$someVar);
基于@Sasha Vas的回答。
Monologs StreamHandler具有一个气泡参数,它可以完全满足您的需要,避免了日志冒泡到其他层次。
在Laravel 5.6
之后,此未记录的功能也可用。
这是我的channels
之一:
'warning' => [
'driver' => 'single',
'level' => 'warning',
'bubble' => false,
'path' => storage_path('logs/warning.log'),
],
现在,如果我使用Log::warning('warning')
,它将仅显示在warning.log
中
将bubble
参数设置为false
$logger->pushHandler(new StreamHandler(__DIR__.'/log/info.log', Logger::INFO, false));