Я использовал Log4perl экстенсивно во многих сценариях. Я хотел бы увеличить те сценарии для установки кода ошибки если любой WARN
или ERROR
сообщения были зарегистрированы. Я не мог найти очевидный способ сделать это на основе существующей документации.
Я хотел бы избежать, чтобы "в лоб" переписало моих существующих сценариев для включения проверки каждый WARN
или ERROR
сообщение журнала; я предпочел бы обрабатывать его до выхода сценария, если это возможно, как этот псевдокод:
if $log->has_warnings_or_errors then
exit 1
else
exit 0
Там какой-либо простой способ состоит в том, чтобы назвать Log4Perl, чтобы определить, имеет ли текущий регистратор сообщения проблем определенных уровней?
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;
myprog:
#! /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
Закомментируйте ...-> предупреждение
, ...-> ошибку
и ...-> фатальные
строки для получения
$ ./myprog INFO - info 0 $ echo $? 0
Вы можете использовать оболочку и написать пользовательский фатальный
, ошибку
и предупреждение
методы, увеличивающие счетчик, и метод доступа, возвращающий значение этого счетчика.