PHP - 记录堆栈跟踪警告?

问题描述 投票:17回答:3

是否有可能记录堆栈跟踪的PHP警告?或者捕获一个警告和error_log()吗?

在我的错误日志中有一些代码会导致警告,但是在不知道堆栈跟踪的情况下,无法知道导致这些警告的原因。

php warnings stack-trace error-log
3个回答
13
投票

有一个使用set_error_handler()ErrorException这样做的例子:

https://php.net/manual/en/class.errorexception.php

您只需要在处理函数内部实现自定义日志记录功能。


更新:

请注意,这也适用于警告和许多其他错误类型。有关完全兼容性,请参阅set_error_handler()手册:

https://php.net/set_error_handler


4
投票

只需在脚本开头抛出:

set_error_handler(function($severity, $message, $file, $line) {
    if (error_reporting() & $severity) {
        throw new ErrorException($message, 0, $severity, $file, $line);
    }
});

删除要记录所有内容的if,即使它已被抑制。


1
投票

我相信xdebug将会记录,如果你在php.ini文件中启用了它,但它有堆栈跟踪(有一些奖励功能,如显示局部变量)。但不建议用于生产环境。

XDebug Stack Traces

© www.soinside.com 2019 - 2024. All rights reserved.