Как я могу сказать, испустил ли Log4perl какие-либо предупреждения во время выполнения?

Я использовал Log4perl экстенсивно во многих сценариях. Я хотел бы увеличить те сценарии для установки кода ошибки если любой WARN или ERROR сообщения были зарегистрированы. Я не мог найти очевидный способ сделать это на основе существующей документации.

Я хотел бы избежать, чтобы "в лоб" переписало моих существующих сценариев для включения проверки каждый WARN или ERROR сообщение журнала; я предпочел бы обрабатывать его до выхода сценария, если это возможно, как этот псевдокод:

if $log->has_warnings_or_errors then
  exit 1
else
  exit 0

Там какой-либо простой способ состоит в том, чтобы назвать Log4Perl, чтобы определить, имеет ли текущий регистратор сообщения проблем определенных уровней?

6
задан brian d foy 7 April 2010 в 18:14
поделиться

2 ответа

Используйте приложение .

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
6
ответ дан 17 December 2019 в 02:26
поделиться

Вы можете использовать оболочку и написать пользовательский фатальный , ошибку и предупреждение методы, увеличивающие счетчик, и метод доступа, возвращающий значение этого счетчика.

0
ответ дан 17 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: