PHP:如何首先记录异常,然后通过邮件报告


PHP: How to first log an exception and then report by mail?

我刚刚手工制作了一个复杂的订单流程,很快就会上线。第一次,我想知道发生的任何错误,但我也想记录它们。这个答案建议首先记录它们,然后再邮寄它们,这样更安全,因为邮寄可能会失败。但是当我捕获异常时,它没有被记录,当我没有捕获它时,我不能发送电子邮件。

我代码:

// convert errors to exceptions
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
try {
    // ... some code that might cause errors or throw exceptions
} catch(Exception $e) {
    log(...); // how can i make the error being logged here?
    mail(...); // afterwards i send an email
    throw $e; // i could re-throw it this way, but only after mailing it, cause it kills the process.
}

当然,我可以编写一个日志例程,但我猜PHP已经以一种我想使用的聪明方式做到了。

另一件很棒的事情是有一些控制来确保每小时发送的错误邮件不超过x封。

总的来说,这似乎是一个很常见的设置,但我找不到一个现成的解决方案。还是说这个想法太蠢了?

error_log()函数将自动将您的消息记录到web服务器的error_log文件中。如果您愿意,您可以指定一个自定义日志文件,而不是默认的error_log文件。

所以你可以在error_log中记录一个简单的错误信息,像这样:

error_log("This is my error message");

或者记录/var/log/web_error_log中的异常消息:

} catch (Exception $e) {
    error_log($e->getMessage(), 3, '/var/log/web_error_log');
}

error_log的详细信息请参见http://ca2.php.net/manual/en/function.error-log.php