我可能只是在错误处理文档方面遇到问题,但我想到的是几种不同的情况:
-
当 PHP 抛出一个典型的错误时,我想保留我放置的默认错误日志记录,但也根据错误类型/严重性有单独的错误日志(仅针对致命错误的日志,所以我不必扫描过去数百万个小错误,但仍然将这些小错误记录在一般堆中(。
-
对于Web应用程序/平台(如Wordpress或MediaWiki等(,将PHP错误(所有,而不仅仅是Webapp引发的错误(存储在Web应用程序错误日志中。(这几乎可以肯定是基于严重性的。 这个想法是转到webapp错误日志,并能够看到PHP致命错误混合在一起,以避免查找该域的错误日志等(
-
Web应用程序抛出的某些类型的错误也会转到常规错误日志,它是自己的自定义日志(我知道我已经看到了一个或另一个,但不是两个(。
所以根本问题是:如何在不丢失/覆盖默认错误日志的情况下拥有自定义错误日志?
此外,假设在大多数情况下,此级别的错误和异常是可以互换的,或者我是否需要采取其他步骤来实现类似的异常处理目标,这是否非常安全?
您可以设置自己的错误处理程序,并且仍然让 php 像往常一样处理触发的错误
http://se.php.net/manual/en/function.set-error-handler.php
set_error_handler(function($errno, $errstr, $errfile, $errline) {
// do what you want
return false; // returning false makes PHP execute its own error handler as well
});
您可以使用自定义错误处理程序并将消息记录到不同的文件中,例如,
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
return false;
}
$logFile = "";
switch ($errno) {
case E_USER_ERROR:
$logFile = "logs/php-errors-".date("yyyy-mm-dd",time());
exit(1);
break;
case E_USER_WARNING:
$logFile = "logs/php-warnings-".date("yyyy-mm-dd",time());
break;
case E_USER_NOTICE:
$logFile = "logs/php-notices-".date("yyyy-mm-dd",time());
break;
default:
$logFile = "logs/php-unkown-".date("yyyy-mm-dd",time());
break;
}
error_log($errstr,3,$logFile);
return true;
}
您应该使用
set_error_handler("myErrorHandler");