gpt4 book ai didi

php - 使用堆栈跟踪记录捕获的异常

转载 作者:IT王子 更新时间:2023-10-29 00:54:54 24 4
gpt4 key购买 nike

如果我没有在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com