我一直在使用 set_error_handler 来覆盖默认的 php 错误处理,其唯一目的是进行自定义错误记录。但我得出的结论是,根本无法自定义错误日志记录并记录所有可能的错误。
1) 你可以使用 set_error_handler() - 但是这个函数,引用自 php 手册:
following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT
那么 - 通过这条路线 - 您的自定义日志将不会记录这些错误?
2) 第二种方法是使用 register_shutdown_function()
然后运行 error_get_last()
获取错误...但是 - error_get_last()
... 只获取最后一个错误 ... 虽然您可能在脚本执行期间收到多个警告和通知 - 这种方法只允许您记录最近的错误、通知、警告 - 对吗?
所以 - 恕我直言 - 我看不出有任何解决办法。看起来如果想要拥有最完整的错误日志 - 应该坚持使用默认的 php 记录器 - 对吧?
最佳答案
Second way is to use register_shutdown_function() and then run error_get_last() to get the the error... But - error_get_last()...only gets the last error
是的,但是如果它是杀死脚本的错误类型,那么它确实是您的关闭函数中的正确错误。为了以防万一,您可以检查它为其中一种可捕获类型返回的数组中的 type
键。如果它可能已被另一个错误处理程序捕获,则不采取任何操作。
FWIW,我从未见过E_CORE_ERROR
、E_CORE_WARNING
、E_COMPILE_ERROR
或E_COMPILE_WARNING
发生在现实世界中。大多数编译错误是解析错误。
关于php - 自定义 PHP 日志记录和记录所有可能的错误是否相互排斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640811/