[Cascavel-pm] Log::Log4perl - salvar logs com nomes

Márcio Vitor cromo.jml em gmail.com
Terça Junho 3 12:42:58 PDT 2008


Olá a todos, estou implementando um log, e resolvi utilizar o módulo
cpan Log::Log4perl, estou fazendo da seguinte maneira:

<código com log>
78	use Log::Log4perl qw(:easy);
79	Log::Log4perl->easy_init($ERROR);
80	Log::Log4perl->init("../etc/log4perl.conf");

832    my $log = Log::Log4perl->get_logger();
833    $log->info("Requisição http finalizada");
<código com log>

E aqui está o meu '../etc/log4perl.conf':
<log4perl.conf>
log4perl.rootLogger=DEBUG, A1
log4perl.appender.A1=org.apache.log4j.FileAppender
log4perl.appender.A1.File=../log/system.log
log4perl.appender.A1.layout=org.apache.log4j.PatternLayout
log4perl.appender.A1.layout.ConversionPattern=%d - %F %L %c %p - %m%n
</log4perl.conf>

Desta maneira funciona numa boa, o que eu preciso agora é repassar
para o método get_logger a categoria que está sendo gravada e que ele
grave o log num arquivo com o nome desta categoria.
Olhando no manual do Cpan e no tutorial indicado no mesmo, vi que ele
permite uma interessante associação por categorias ao logs, mas pelo
que entendi não para separá-los em arquivos.
A minha idéia era configurar o arquivo log4perl.conf para fazer algo assim:
832    my $log = Log::Log4perl->get_logger($self->categoria);
E que com este parâmetro ele cuidasse de abrir e gravar o arquivo de
log com o nome do valor repassado por $self->categoria.

A solução que encontrei foi criar um appender usando o Log::Dispatch::File:

 832         my $log = Log::Log4perl->get_logger();
 833         my $appender = Log::Log4perl::Appender->new(
 834         "Log::Dispatch::File",
 835         filename => "../log/".$self->categoria.".log",
 836         mode     => "append",
 837             );
 838         $log->add_appender($appender);
 839         $log->info("Requisição http finalizada");

Porém aí as configurações de layout feitas no arquivo não funcionam e
ele grava o log da seguinte maneira:
<log>
INFO - Requisição http finalizada
</log>
Enquanto seguindo as configurações do /etc/log4perl.conf ele grava assim:
<log>
2008/06/03 15:31:36 - associacao.pm 1472 associacoes INFO - Requisição
http finalizada
</log>

Alguém sabe como posso configurar ../etc/log4perl.conf para ele
próprio receber o nome do arquivo e escrever mantendo as configurações
nele existentes ?

Obrigado a todos desde já

Márcio Vitor


Mais detalhes sobre a lista de discussão Cascavel-pm