PHP全局错误处理的最佳实践?

4

我在PHP 5中使用了一个将错误转换为异常的类,它会将错误记录到文件中并/或将其发送到指定帐户的电子邮件中。有没有更好的方法来实现这个功能?我知道这方面还有改进的空间。我正在使用set_error_handler。

set_error_handler("exception_error_handler");

我的代码能够记录和发送错误信息,但是我想知道是否有更好的方式。如果发生错误,将其记录到数据库中是否更好 - 假设数据连接存在。对于网站,行业标准是什么?


你需要使用 set_error_handler 来设置错误处理程序。否则,你有什么问题?你的代码没有做到你想要的吗?请更具体地描述。 - user229044
2个回答

7

处理错误的代码必须万无一失。

有时候,它会因为你忘记测试的一个非常晦涩的原因而启动,但即使在代码世界末日的挣扎中,你仍然希望它能运行。

将输出写入数据库会对您的代码创建巨大的依赖关系 - 数据库的缺失很可能是问题的主要原因,并会被报告。

依靠电子邮件仍然是一种依赖关系,然而,在停机事件发生时,最紧迫的目标应该是让系统重新工作 - 因此发送电子邮件是一种非常有效的提醒方式,让您知道需要修复某些内容。

PHP的文件处理功能不适用于并发访问 - 因此,虽然我建议在本地记录任何事件,但不要从您的代码中编写文件 - 使用syslog接口。可以在将其发送到syslog后使用相关详细信息发送电子邮件。

希望对您有所帮助。

C.


3

我不会把那个逻辑放到错误处理程序中。

看一下这个方法,来自于Kohana

/**
* PHP error handler, converts all errors into ErrorExceptions. This handler
* respects error_reporting settings.
*
* @throws ErrorException
* @return TRUE
*/
public static function error_handler($code, $error, $file = NULL, $line = NULL)
{
    if (error_reporting() & $code)
    {
        // This error is not suppressed by current error reporting settings
        // Convert the error into an ErrorException
        throw new ErrorException($error, $code, 0, $file, $line);
    }

    // Do not execute the PHP error handler
    return TRUE;
}

代码整洁,功能与方法描述一致。您现在可以将处理移至异常处理程序或放入catch块中。


好的,当他提供了代码示例时,我回答了这个问题,但现在它已经消失了,所以如果我的回答没有任何意义,我很抱歉。 - The Pixel Developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接