Log4perl是一个很棒的日志记录工具。
warnings pragma 也是一个必不可少的工具。
但是,当 Perl 脚本作为守护进程运行时,Perl 警告会打印到 STDERR 中,没有人可以看到它们,而不是打印到相关程序的 Log4perl 日志文件中。
有没有办法将 Perl 警告捕获到 Log4perl 日志中?
例如,此代码将很好地记录到日志文件中,但如果它作为守护程序运行,则 Perl 警告将不会包含在日志中:
#!/usr/bin/env perl
use strict;
use warnings;
use Log::Log4perl qw(get_logger);
# Define configuration
my $conf = q(
log4perl.logger = DEBUG, FileApp
log4perl.appender.FileApp = Log::Log4perl::Appender::File
log4perl.appender.FileApp.filename = test.log
log4perl.appender.FileApp.layout = PatternLayout
);
# Initialize logging behaviour
Log::Log4perl->init( \$conf );
# Obtain a logger instance
my $logger = get_logger("Foo::Bar");
$logger->error("Oh my, an error!");
$SIG{__WARN__} = sub {
#local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$logger->warn("WARN @_");
};
my $foo = 100;
my $foo = 44;
这仍然会打印到 STDERR:
"my" variable $foo masks earlier declaration in same scope at log.pl line 27.
并且日志文件没有捕捉到这个警告。