![Page 2: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/2.jpg)
O que pode dar errado?
![Page 3: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/3.jpg)
Tudo.
![Page 4: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/4.jpg)
O que pode dar errado?
Dados externos
Configurações
Sistema de arquivos
Estados inconsistentes
Casos especiais ou extremos
![Page 5: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/5.jpg)
Apagar incêndio é pra bombeiro.
![Page 6: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/6.jpg)
Logging debugging tradicional
Chamadas ao “print” espalhadas
Chamadas “warn” espalhadas
Dump de estruturas de dados (Data::Dumper)
Rastreamento (“trace”) manual
perl -d
![Page 7: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/7.jpg)
Problemas com o debugging tradicional
● Reativo
● Custoso
● Não escala bem
![Page 8: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/8.jpg)
Logging tradicional
sub debug { print “@_\n”;}
...
debug( “cheguei até aqui” );
![Page 9: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/9.jpg)
Problemas com o logging tradicional
● Reativo
● Custoso
● Não escala bem
![Page 10: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/10.jpg)
E agora?
● Fazemos o nosso...
● ...não!
![Page 11: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/11.jpg)
● There is More Than One Way To Do It...
● ...But Consistency Is Not A Bad Thing
TIMTOWTDI BCINABT
![Page 12: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/12.jpg)
Log::Log4perl
● Implementação do Log4j para Perl
● Controle do número de mensagens, porlog level e componentes
● Definição dinâmica do alvo das mensagens(appenders)
● Formatação de mensagens
● Configuração externa
![Page 13: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/13.jpg)
TRACE
DEBUG
INFO
WARN
ERROR
Log levels
FATAL
![Page 14: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/14.jpg)
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!”;
![Page 15: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/15.jpg)
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 );
![Page 16: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/16.jpg)
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!” );
![Page 17: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/17.jpg)
Arquivos de Configuração
# nivel e alvos, por componenteslog4perl.logger = ERROR, Arq, Telalog4perl.logger.Foo.Bar = FATAL, Arq, Tela
# log em arquivoslog4perl.appender.Arq = Log::Log4perl::Appender::Filelog4perl.appender.Arq.filename=file.loglog4perl.appender.Arq.mode = appendlog4perl.appender.Arq.layout=\ Log::Log4perl::Layout::SimpleLayout
# log na telalog4perl.appender.Tela = Log::Log4perl::Appender::Screen;log4perl.appender.Tela.layout=\ Log::Log4perl::Layout::PatternLayoutlog4perl.appender.layout.ConversionPattern = [%d] %m %n
![Page 18: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/18.jpg)
Appenders
Log::Dispatch::ApacheLogLog::Dispatch::DBILog::Dispatch::EmailLog::Dispatch::Email::MailSendLog::Dispatch::Email::MailSendmailLog::Dispatch::Email::MIMELiteLog::Dispatch::FileLog::Dispatch::FileRotateLog::Dispatch::HandleLog::Dispatch::ScreenLog::Dispatch::SyslogLog::Dispatch::TkLog::Dispatch::SNMP...
![Page 19: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/19.jpg)
Conversion Patterns
%c Categoria do evento de logging%m Mensagem de log%n Quebra de linha
%C Nome do pacote (ou classe) totalmente qualificado%F Arquivo onde o evento de logging ocorreu%d Data atual em yyyy/MM/dd hh:mm:ss%H nome do host%l Nome do método invocante, do arquivo e número da linha entre parênteses.%r Número de milisegundos passados do início do programa ao evento de log.
(e muito mais)
![Page 20: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/20.jpg)
Outras Opções
if ( $logger>is_debug ) { foreach my $elemento (@lista_enorme) { $logger>debug( $elemento );}
open my $fh, '<', $filenameor $logger>logdie( “$filename: $!” );
![Page 21: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/21.jpg)
Um arquivo de configuração diferente... ... ou nem tanto
log4j.rootLogger=debug, stdout, Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=example.loglog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p %c %m%n
![Page 22: Logging e depuração enterprise-level com Log4perl](https://reader034.vdocuments.us/reader034/viewer/2022051609/5479301bb4af9fa5158b4748/html5/thumbnails/22.jpg)
Obrigado!
Dúvidas?