Monolog-仅记录特定级别的错误

问题描述 投票:2回答:3

我在香草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

php monolog
3个回答
6
投票

今天我遇到了同样的问题,这使我来到了这里。无论如何,我通过使用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
投票

基于@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


0
投票

bubble参数设置为false

$logger->pushHandler(new StreamHandler(__DIR__.'/log/info.log', Logger::INFO, false));
© www.soinside.com 2019 - 2024. All rights reserved.