是自定义PHP日志记录和记录所有可能的错误互斥?

时间:2011-04-12 19:53:25

标签: php

我一直在使用set_error_handler覆盖默认的php错误处理,其唯一目的是记录自定义错误。但我得出结论,一个人根本无法定制错误记录并记录所有可能的错误。

1)你可以使用set_error_handler() - 但这个函数引自php手册:

  

以下错误类型不能   使用用户定义的函数处理:   E_ERROR,E_PARSE,E_CORE_ERROR,   E_CORE_WARNING,E_COMPILE_ERROR,   E_COMPILE_WARNING,以及大部分内容   E_STRICT

那么 - 通过这条路线 - 您的自定义日志不会记录这些错误吗?

2)第二种方法是使用register_shutdown_function(),然后运行error_get_last()以获取错误...但是 - error_get_last() ...只获取最后一个错误...并且虽然在脚本执行期间可能有多个警告和通知 - 这种方法只允许您记录最近的错误,通知,警告 - 对吗?

所以 - 恕我直言 - 我没有看到任何解决方法。看起来如果想要拥有最完整的错误日志 - 应该坚持使用默认的php logger - 对吗?

2 个答案:

答案 0 :(得分:4)

  

第二种方法是使用register_shutdown_function()然后运行error_get_last()来获取错误......但是 - error_get_last()...只获取最后一个错误

是的,但是如果它是杀死脚本的错误类型,那么在关闭函数中确实会出现正确的错误。为了以防万一,您可以检查它为其中一种可捕获类型返回的数组中的type键。如果它可能被另一个错误处理程序捕获,则不采取任何操作。

FWIW,我从未看到E_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING发生在现实世界中。大多数编译错误都是解析错误。

答案 1 :(得分:2)

1)这是正确的。因为这个错误会阻止整个php进程正常工作,因此让软件恢复自身没有多大意义。但是,如果你编写软件,那就很难打破,除了记录之外你还有其他问题。

2)到目前为止似乎是正确的。但是你也有set_error_handler()

相关问题