Voltado para desenvolvedores de aplicativos robustos e de qualidade corporativa em Perl, o Log4perl oferece uma solução eficiente e elegante para logging, possui diversos appenders e pode ser integrado de forma transparente a frameworks web, até mesmo a aplicações em Java!
6. Logging debugging tradicional
Chamadas ao “print” espalhadas
Chamadas “warn” espalhadas
Dump de estruturas de dados (Data::Dumper)
Rastreamento (“trace”) manual
perl -d
7. Problemas com o debugging tradicional
● Reativo
● Custoso
● Não escala bem
8. Logging tradicional
sub debug {
print “@_n”;
}
...
debug( “cheguei até aqui” );
9. Problemas com o logging tradicional
● Reativo
● Custoso
● Não escala bem
11. TIMTOWTDI
BCINABT
● There is More Than One Way To Do It...
● ...But Consistency Is Not A Bad Thing
12. Log::Log4perl
● Implementação do Log4j para Perl
● Controle do número de mensagens, por
log level e componentes
● Definição dinâmica do alvo das mensagens
(appenders)
● Formatação de mensagens
● Configuração externa
14. Modo Simples
use Log::Log4perl qw(:easy);
Log::Log4perl>easy_init( $INFO );
DEBUG “Isso nao eh exibido”;
INFO “Mas isso eh o/”;
ERROR “E isso tambem!”;
15. Modo Avançado: Inicialização
use Log::Log4perl;
Log::Log4perl>init( 'log.conf' );
Log::Log4perl>init_once( 'log.conf' );
Log::Log4perl>init_and_watch( 'log.conf', 10 );
16. Usando
package Foo::Bar;
use Log::Log4perl;
my $logger = Log::Log4perl>get_logger;
$logger>debug( “Going once...” );
package Foo::Baz;
use Log::Log4perl;
my $logger = Log::Log4perl>get_logger(“X”);
$logger>error( “D'oh!” );
20. Outras Opções
if ( $logger>is_debug ) {
foreach my $elemento (@lista_enorme) {
$logger>debug( $elemento );
}
open my $fh, '<', $filename
or $logger>logdie( “$filename: $!” );
21. Um arquivo de configuração diferente...
... ou nem tanto
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %c %m%n