【问题标题】:Suppress stacktrace with trigger_error when logging at E_USER_NOTICE在 E_USER_NOTICE 记录时使用 trigger_error 抑制堆栈跟踪
【发布时间】:2013-09-18 03:08:11
【问题描述】:

我想在 apache 错误日志中记录来自我的 php 应用程序的一些消息。但我希望这仅发生在非生产环境中。

我发现 php 有 error_log 将消息记录到错误日志文件,但我如何控制它只在我的应用程序在非生产环境中运行时才记录。

另外,我发现trigger_error 带有error type 参数。然后 php.ini 中的 error_reporting 设置可以决定实际记录哪些错误类型。因此,在开发中,我将 error_reporting 设置为 E_ALL ,但在生产中受到更多限制。所以,现在我可以使用 trigger_log 并始终登录 E_USER_NOTICE。这意味着我的消息仅显示在开发日志文件中,而不显示在生产日志文件中。

但是,trigger_error 还会为每个日志生成一个堆栈跟踪,这对我来说有点不必要。如何禁用此堆栈跟踪。

另外,我做事的方式是否正确。人们通常如何处理这个问题。

编辑: 我并不想隐藏错误消息。我正在尝试在 dev 中提供更多 debug 消息。诸如“请求带有以下参数”、“第 1 步完成”等内容。这在生产中确实不需要。

【问题讨论】:

  • 但是你要在生产环境中做什么呢?
  • 为什么要在生产中限制 error_reporting?您的程序是否经常产生错误消息?是否考虑过修复它们?
  • @YourCommonSense 查看我的编辑。我真的只是想打印调试消息以简化开发和测试。这里没有要修复的错误。也许 trigger_error 不是解决此问题的正确工具。

标签: php apache logging


【解决方案1】:

如果您只想手动将自定义消息发送到错误日志中,log_error() 是您正在寻找的功能。

【讨论】:

  • 您的意思可能是error_log()。我已经在我的问题中提到了使用它的问题。基本上,这将在任何地方记录。我如何选择性地仅登录 dev/test。
  • 把它包装在一个检查常量的函数中?
【解决方案2】:

首先,抑制错误处理不是一个好主意 - 错误会对应用程序性能产生巨大影响 - 抑制错误报告并不能消除减速。

PHP 中没有“trigger_log”。

PHP 中的内置错误处理不会生成堆栈跟踪 - 您必须安装自定义错误处理程序。如果你想改变它的行为,你需要找到它并修改代码。

使用 'trigger_error' 记录调试事件是一个非常糟糕的主意。

【讨论】:

  • trigger_log 是一个错字。我的主题使用了trigger_error。我不是想压制error_handling。如何仅在 dev 中记录调试事件。正确的方法是什么。
  • 使用 syslog()(在条件语句中)
  • 能否使用 syslog() 仅发送到 apache 错误日志。您指的是什么条件语句,检查环境,如何?
  • 1) 都在文档中。 2)我不知道你如何区分你的生活和生产环境 3)见 2
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 2015-12-07
  • 2023-04-05
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2021-12-30
  • 2013-09-29
相关资源
最近更新 更多