【问题标题】:How can one see all warnings under mod_perl如何在 mod_perl 下查看所有警告
【发布时间】:2013-01-14 10:23:26
【问题描述】:

在 mod_perl 下运行脚本时,如何确保看到 Perl 的所有警告和错误消息? (Apache/2.2.16 (Debian) [...] mod_perl/2.0.4 Perl/v5.10.1)

我觉得我做的一切都是正确的:我在 httpd.conf 中有“PerlWarn On”,我有

use strict;
use warnings FATAL => 'all';

在我所有的 Perl 文件中,当我自己使用 warn() 时,我会在 /var/log/apache2/error.log 中看到结果。

但是很多消息仍然没有收到。例如,“无法定位对象方法”永远不会出现在日志中。脚本就这样死了,我必须自己弄清楚在哪里以及为什么。

我可能忽略了什么?

【问题讨论】:

  • 您的某些脚本中是否覆盖了$SIG{__WARN__}$SIG{__DIE__}
  • 不,我没有接触任何信号处理。
  • 请求由 Apache2::Controller::Dispatch::Simple 处理,控制器是 Apache2::Controller+Apache2::Request,其余的几乎都是我自己的代码。没有 CGI 模块。
  • 在发生问题的模块中将use warnings FATAL => 'all'; 替换为use warnings; 会使警告出现在error.log 中。 FATAL => all 是否有可能使脚本在有机会打印到 STDERR 之前死掉?

标签: perl logging apache2 warnings mod-perl2


【解决方案1】:

声明

use warnings FATAL => 'all';

lexical warnings pragma。它仅适用于当前块(在这种情况下是您的脚本),而不适用于您的脚本调用的模块或其他文件。

查看Carp::Always 以在您的所有代码中获取这种行为以进行调试。

【讨论】:

  • 你也可以use Carp; local $SIG{__WARN__} = \&Carp::cluck;
  • @Zaid,这不会只适用于当前文件,就像他遇到的问题一样?
  • 很高兴了解 Carp::Always。它确实在日志中打印了关于我已经看到的警告的额外信息(我自己生成的警告),但不幸的是没有出现新的警告。
  • @scozy,也许某处的某个模块正在做一些有趣的警告?
  • @dan1111 :我一直在使用它,只要您放置它的调用脚本是堆栈跟踪的一部分,它就应该可以工作。
猜你喜欢
  • 2012-03-14
  • 2015-06-29
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
相关资源
最近更新 更多