如何判断Log4perl在运行期间是否发出任何警告?
我已经在许多脚本中广泛使用。如果记录了任何如何判断Log4perl在运行期间是否发出任何警告?,perl,log4perl,Perl,Log4perl,我已经在许多脚本中广泛使用。如果记录了任何WARN或error消息,我想增加这些脚本以设置错误代码。基于现有文档,我找不到任何明显的方法来实现这一点 我希望避免对现有脚本进行暴力重写,以在每个WARN或ERROR日志消息上添加检查;如果可能的话,我更愿意在脚本退出之前处理它,如以下伪代码: if $log->has_warnings_or_errors then exit 1 else exit 0 有没有简单的方法可以调用Log4Perl来确定当前记录器是否发出了某些级别的消息
WARN
或error
消息,我想增加这些脚本以设置错误代码。基于现有文档,我找不到任何明显的方法来实现这一点
我希望避免对现有脚本进行暴力重写,以在每个WARN
或ERROR
日志消息上添加检查;如果可能的话,我更愿意在脚本退出之前处理它,如以下伪代码:
if $log->has_warnings_or_errors then
exit 1
else
exit 0
有没有简单的方法可以调用Log4Perl来确定当前记录器是否发出了某些级别的消息?您可以使用一个自定义的fatal
、error
和warn
方法来递增计数器和返回该计数器值的访问器。使用一个
MyCounter.pm:
package MyCounter;
use warnings;
use strict;
use Log::Log4perl::Level;
sub new {
my($class,%arg) = @_;
bless {} => $class;
}
sub log {
my($self,%arg) = @_;
++$self->{ $arg{log4p_level} };
}
sub howmany {
my($self,@which) = @_;
my $total = 0;
$total += ($self->{$_} || 0) for @which;
$total;
}
1;
#! /usr/bin/perl
use warnings;
use strict;
use Log::Log4perl;
my $conf = q(
log4perl.category.MyLogger = INFO, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
);
Log::Log4perl->init(\$conf);
my $l = Log::Log4perl->get_logger("MyLogger");
my $counter = Log::Log4perl::Appender->new("MyCounter");
$l->add_appender($counter);
$l->warn("warning");
$l->info("info");
$l->error("incorrect");
$l->fatal("really bad, man");
print $counter->howmany(qw/ WARN ERROR FATAL /), "\n";
exit ($counter->howmany(qw/ WARN ERROR FATAL /) ? 1 : 0);
myprog:
package MyCounter;
use warnings;
use strict;
use Log::Log4perl::Level;
sub new {
my($class,%arg) = @_;
bless {} => $class;
}
sub log {
my($self,%arg) = @_;
++$self->{ $arg{log4p_level} };
}
sub howmany {
my($self,@which) = @_;
my $total = 0;
$total += ($self->{$_} || 0) for @which;
$total;
}
1;
#! /usr/bin/perl
use warnings;
use strict;
use Log::Log4perl;
my $conf = q(
log4perl.category.MyLogger = INFO, Screen
log4perl.appender.Screen = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
);
Log::Log4perl->init(\$conf);
my $l = Log::Log4perl->get_logger("MyLogger");
my $counter = Log::Log4perl::Appender->new("MyCounter");
$l->add_appender($counter);
$l->warn("warning");
$l->info("info");
$l->error("incorrect");
$l->fatal("really bad, man");
print $counter->howmany(qw/ WARN ERROR FATAL /), "\n";
exit ($counter->howmany(qw/ WARN ERROR FATAL /) ? 1 : 0);
输出:
$ ./myprog
WARN - warning
INFO - info
ERROR - incorrect
FATAL - really bad, man
3
$ echo $?
1