在 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();
请注意,我还没有实际测试过这个,但我没有发现它不起作用的原因
刚开始使用 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();
请注意,我还没有实际测试过这个,但我没有发现它不起作用的原因