我想为我的Perl脚本生成一个日志。但是当我使用Log::Log4perl时,如何捕获脚本在任何情况下抛出的错误。如何将其记录到日志文件中。目前,无论我在变量标签中明确写出什么,如ERROR(),DEBUG()等,都是打印到日志文件中唯一的。
有没有办法使用Log :: Log4perl。
以下代码为例:
use strict;
use warnings;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init( { level => $DEBUG,
file => ">>test.log" });
my $logger = Log::Log4perl->get_logger();
$logger->fatal( "This is", " fatal");
$logger->error( "This is error");
$logger->warn( "This is warn");
$logger->info( "This is info");
$logger->debug( "This is debug");
$logger->trace( "This is trace");
my $a = 10;
my $b = $a/0;
除以零错误不会记录到脚本中。我的原始脚本太复杂,无法检查每个错误,因此需要将stderr上的错误记录到日志文件中的内容。
答案 0 :(得分:3)
use Log::Log4perl qw(get_logger);
$SIG{__DIE__} = sub {
if($^S) {
# We're in an eval {} and don't want log
# this message but catch it later
return;
}
$Log::Log4perl::caller_depth++;
my $logger = get_logger("");
$logger->fatal(@_);
die @_; # Now terminate really
};
另见Log4perl - how can I make sure my application logs a message when it dies unexpectedly?