刚开始使用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
答案 0 :(得分:1)
ErrorHandler
会抓住trigger_error
的所有级别,除非您使用@
运算符使其静音,或者实际设置error_reporting(E_ALL & ~E_NOTICE);
如果由于某种原因你想要保持错误报告但同时过滤掉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();
请注意,我实际上没有对此进行过测试,但我发现没有理由不起作用
答案 1 :(得分:0)
Monolog日志记录级别与PHP日志记录级别无关。由error_reporting()
设置的PHP日志记录级别控制PHP引擎本身在其自己的输出中报告的内容类型。 Monolog日志记录级别模拟unix syslog级别,旨在由应用程序驱动,而不是由PHP驱动。即,error_reporting()
处理由PHP生成的消息,而Monolog处理由您的应用生成的消息。例如,在您的应用程序中,当您发出日志时,您需要指明其严重性:
if ($some_not_important_condition) {
$logger->info('foo');
}
if ($some_important_condition) {
$logger->error('bar');
}
因此,您的应用始终会创建info
级别的日志条目,并且可以根据运行时配置来决定进入哪个和/或去哪里。例如,您可以在开发中打印到屏幕或在生产中登录Nagios。