【问题标题】:Logging PHP fatal-errors in CakePHP system在 CakePHP 系统中记录 PHP 致命错误
【发布时间】:2012-08-24 22:33:01
【问题描述】:

我需要记录我网站的致命错误。

我通常会检查 error.log 和 debug.log 文件中的 CakePHP 错误。
但我发现 PHP 相关的致命错误没有记录在某个地方。
还讨论了in this thread

我检查了 php.ini。它有以下几行:

log_errors = On
;error_log = filename

我无权更改 php.ini。我可以要求管理员更改此设置,但似乎每次我需要更改时我都需要问他:) 我也担心性能。记录错误是否会降低性能?

所以我发现我可以在脚本中添加以下两行来记录错误并在需要时更改文件夹或文件名。

ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");

所以我想知道将这些行放在我的代码中的什么位置?我应该把它放在 AppController::beforeFilter 里面吗?还是在 CakePHP 2 配置中有更好的地方/解决方案?

【问题讨论】:

  • 据我所知,您无法在 PHP 中记录致命错误,因为致命错误对 PHP 解释器来说是致命的。您的 ini_set 方法也可能存在缺陷,因为它不会捕获任何错误,包括加载这些行所在的文件,因此仍然无法正确记录早期死亡。
  • 不是 apache 也记录了这些错误吗?
  • 如果致命错误发生在任何包含的文件中(即不是第一个请求文件),使用[set_error_handler()](http://php.net/manual/en/function.set-error-handler.php) 记录应该相当容易。另一方面,无法处理解析/编译错误。

标签: cakephp logging cakephp-2.0 php


【解决方案1】:

这是一个旧线程。 与此同时,cake 2.x 的错误都记录在生产模式中 - 致命错误也是如此。

触发一个并查看您的/tmp/logs/error.log

但您可以通过查看核心代码轻松找到: https://github.com/cakephp/cakephp/blob/master/lib/Cake/Error/ErrorHandler.php#L189

【讨论】:

  • 不幸的是,致命错误没有记录在 error.log 中。在浏览器窗口上看到致命错误后,我多次检查该文件。
  • 您使用的是最新的 2.x 版本吗?因为它无论如何都可以工作 - 哦,它可能 >= 2.2:book.cakephp.org/2.0/en/appendices/… - 如果您无法升级,您需要使用您在问题中链接的我的“register_shutdown_function”函数。
【解决方案2】:

有框架定义的配置设置。您可以使用Error Handling configuration 类。

这里是changing fatal error behavior 链接,它将帮助您实现同样的目标。

【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2012-03-08
      • 2014-04-17
      • 2014-11-17
      • 1970-01-01
      • 2017-11-25
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多