如果我没有在 PHP 中捕获异常,我会在我的 error.log
文件中收到一条有用的错误消息,其中包含堆栈跟踪。例如,如果我运行:
<?php
function foo() {
throw new Exception('Oh no!');
}
foo();
?>
然后我把它写到我的日志中:
[Wed Mar 06 10:35:32 2013] [error] [client 86.146.145.175] PHP Fatal error: Uncaught exception 'Exception' with message 'Oh no!' in /var/www/test.php:4\nStack trace:\n#0 /var/www/test.php(7): foo()\n#1 {main}\n thrown in /var/www/test.php on line 4
有时我想捕获异常但仍记录该详细信息。我在想象这样的事情:
<?php
function foo() {
throw new Exception('Oh no!');
}
try {
foo();
} catch (Exception $e) {
log_exception($e);
}
?>
其中 log_exception
将写入错误日志的内容与自动写入的未捕获异常的格式基本相同 - 除了具有 Caught exception
而不是PHP fatal error :未捕获的异常
.
是否有内置函数可以记录这样的异常信息,或者将其捕获到字符串中?我在想象一些类似于 Python 中的 traceback.format_exc()
的东西。
最佳答案
error_log($e);
做你想做的。它记录的内容与您没有捕获到异常时所记录的内容完全相同,只是在开头减去“Uncaught”一词。它这样做是因为这就是 Exception
class's __toString()
magic method返回。
您可以在 catch
block 中执行此操作:
try {
foo();
} catch (Exception $e) {
error_log("Caught $e");
}
或者在异常处理程序中:
set_exception_handler(function($exception) {
error_log($exception);
error_page("Something went wrong!");
});
关于php - 使用堆栈跟踪记录捕获的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15245184/