3

我可能只是在处理错误处理文档时遇到了问题,但我想到的是几种不同的情况:

  1. 当 PHP 抛出一个典型错误时,我想保留我放置的默认错误日志,但也有基于错误类型/严重性的单独错误日志(仅用于致命错误的日志,因此我不必扫描数百万个小错误,但仍然在一般堆中记录了那些小错误)。

  2. 对于 web 应用程序/平台(如 Wordpress 或 MediaWiki 等),将 PHP 错误(所有,不仅仅是 webapp 抛出的错误)存储在 web 应用程序错误日志中。(这几乎肯定是基于严重性的。想法是转到 webapp 错误日志并能够看到混合的 PHP 致命错误,以避免追查该域的错误日志等)

  3. webapp 抛出的某些类型的错误也会转到一般错误日志和它自己的自定义日志(我知道我已经看到了一个或另一个,但不是两者都看过)。

所以根本问题是:如何在不丢失/覆盖默认错误日志的情况下拥有自定义错误日志?

此外,假设在大多数情况下,这个级别的错误和异常是可以互换的,或者我是否需要为类似的异常处理目标采取其他步骤?

4

2 回答 2

4

您可以设置自己的错误处理程序,仍然让 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
});
于 2012-05-05T13:42:46.543 回答
0

您可以使用自定义错误处理程序并将消息记录到不同的文件中,

    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");
于 2018-09-21T12:37:58.943 回答