【问题标题】:logging die and warn in Perl Dancer modules在 Perl Dancer 模块中记录死亡和警告
【发布时间】:2015-07-17 00:21:34
【问题描述】:

如果说 die/warn 在我自己的模块中,则希望将 die 和 warn 记录到文件日志中(在生产模式下)。如果 die/warn 出现在 ./lib/main.pm 中,则可以正常工作,但如果它们出现在 MyModule 中则不会,在这种情况下不会出现 logginc。有什么想法吗?

我使用的模式是:

./lib/main.pm:

 package main;
 use Dancer ':syntax';
 use MyModule;
 ...
 warn 'this will get logged. hurrah!';
 my $result = &MyModule::MyMethod();

./MyModule.pm:

 package MyModule;

 ...

 sub MyMethod {
   warn 'this wont get logged for some reason. any idea why not?';
   return 'result';
 }

apache配置:

<VirtualHost *:80>
ServerName myapp.com
DocumentRoot /home/myapp/public

SetEnv DANCER_ENVIRONMENT "production"

<Directory />
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /home/myapp/bin/app.pl
</Directory>

CustomLog /home/myapp/logs/access.log common
ErrorLog /home/myapp/logs/error.log

</VirtualHost>

还有production.yml:

log: "warning"
logger: "file"
log_path: "/home/myapp/logs/"
warnings: 0
show_errors: 0
route_cache: 1

【问题讨论】:

  • 鉴于显示的代码,两个警告都出现在我的控制台上。你能在没有其他源代码的情况下重现这个吗?您的程序是否可能会在某个时候设置一个特殊的 $SIG{__WARN__} 处理程序?
  • 嗨,感谢您的回复。我刚刚编辑了问题以澄清在登录到文件时(在生产模式下)我什么也得不到。 apache 错误日志和舞者生产日志中都没有任何内容。现在将向问题添加部署配置。

标签: perl dancer


【解决方案1】:

我很久以前就想到了这一点,我想我会回答我自己的问题。

  1. 使用“警告”,而不是警告。

  2. 每个模块都需要使用 Dancer ':syntax';

所以,这将起作用:

package MyModule;
use Dancer ':syntax';
...

sub MyMethod {
  warning 'this will get logged with good reason. yippee!';
  return 'result';
  }

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多