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

标签 php

我一直在使用 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_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING 发生在现实世界中。大多数编译错误是解析错误。

关于php - 自定义 PHP 日志记录和记录所有可能的错误是否相互排斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640811/

相关文章:

php - InnoDB 锁定一行以防止多个并发 session 读取该行

php - 存储大量文本的最佳方式? MySQL 之外

php - WordPress 永久链接更改引发 500 内部服务器错误

使用新的 iPadOS/iOS 13 进行 PHP 移动设备检测

php - Laravel 5.8、PHP 中的 validate() 和 validated() 函数有什么区别?

php - 为什么评论没有上传到 MySQL 数据库?

PHP $_GET 变量检查

php - 使用 jquery ajax 发送数组

php - 在 PHP 中绑定(bind)参数的高效循环

javascript - Codeigniter - 打印网页时遇到问题