在单一错误Handler中设置最小PHP错误报告



刚刚开始使用单身来记录我的php项目中的错误,但我想将最小错误报告设置设置为"注意"及以上。立即使用的代码

use MonologErrorHandler;    
$handler = new ErrorHandler($logger);
$handler->registerErrorHandler([], false);
$handler->registerExceptionHandler();
$handler->registerFatalHandler();

生成所有错误,包括通知。我如何设置

的等效

error_reporting(e_all& 〜e_notice(;

使用独白

ErrorHandler将捕获trigger_error的所有级别,除非您使用@操作员沉默它们或实际设置您的error_re_re_ports error_reporting(E_ALL & ~E_NOTICE);

由于某种原因您要保留错误报告,但同时滤除了哪些错误被单一错误处理程序捕获,我会选择扩展错误处理程序并进行注册。这样的东西:

class MyErrorHandler extends MonologErrorHandler{
    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();

请注意,我实际上没有测试过,但是我没有理由它行不通

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

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

因此,您的应用程序始终创建info级别日志条目,这取决于运行时配置,以决定Ingore和/或它们的去向。例如,您可能会在开发中打印到屏幕上或在生产中登录Nagios。

最新更新