在 Monolog ErrorHandler 中设置最小 PHP 错误报告

Set minimum PHP error reporting in Monolog ErrorHandler

刚开始使用 Monolog 在我的 PHP 项目中记录错误,但我想将最小错误报告设置设置为 NOTICE 及以上。我现在使用的代码

use Monolog\ErrorHandler;    
$handler = new ErrorHandler($logger);

$handler->registerErrorHandler([], false);
$handler->registerExceptionHandler();
$handler->registerFatalHandler();

这会生成所有错误,包括 NOTICES。我怎样才能将等价物设置为

error_reporting(E_ALL & ~E_NOTICE);

使用独白

Monolog 日志级别与 PHP 日志级别无关。 PHP 由 error_reporting() 设置的日志记录级别控制 PHP 引擎本身在其自己的输出中报告的内容类型。 Monolog 日志记录级别模拟 unix 系统日志级别,旨在由应用程序驱动,而不是 PHP。即,error_reporting() 处理由 PHP 生成的消息,而 Monolog 处理由您的应用程序生成的消息。例如,在您的应用程序中,当您发出日志时,您指示其严重性:

if ($some_not_important_condition) {
    $logger->info('foo');
}
if ($some_important_condition) {
    $logger->error('bar');
}

因此,您的应用程序始终在创建 info 级别的日志条目,并且由 运行 时间配置来决定将哪个忽略 and/or 它们去向何处。例如,您可以在开发中打印到屏幕或在生产中登录到 Nagios。

ErrorHandler 将捕获所有级别的 trigger_error,除非您使用 @ 运算符将它们静音或通过 error_reporting(E_ALL & ~E_NOTICE);error_reporting 实际设置 error_reporting

如果出于某种原因你想保留错误报告但同时过滤掉哪些错误被 monolog 错误处理程序捕获,我会继续扩展错误处理程序并注册它。像这样:

class MyErrorHandler extends Monolog\ErrorHandler{

    public function handleError($code, $message, $file = '', $line = 0, $context = [])
    {
        if($code === E_NOTICE){
            return;
        }

        parent::handleError($code, $message, $file, $line, $context);
    }
}

use MyErrorHandler as ErrorHandler;    
$handler = new ErrorHandler($logger);

$handler->registerErrorHandler([], false);
$handler->registerExceptionHandler();
$handler->registerFatalHandler();

请注意,我还没有实际测试过这个,但我没有发现它不起作用的原因