我在vanilla 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
?
答案 0 :(得分:5)
我今天遇到了同样的问题,把我带到了这里。无论如何,我通过使用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);
答案 1 :(得分:0)
基于@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
答案 2 :(得分:-1)
将buubble param设置为false
$ logger-&gt; pushHandler(new StreamHandler( DIR 。&#39; /log/info.log' ;, Logger :: INFO,false));