logging e depuração enterprise-level com log4perl

22
Enterprise-level Logging com Log4perl Breno G. de Oliveira <[email protected]>

Upload: garux

Post on 28-Nov-2014

1.191 views

Category:

Technology


0 download

DESCRIPTION

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!

TRANSCRIPT

Page 1: Logging e depuração enterprise-level com Log4perl

Enterprise-level Logging com Log4perl

Breno G. de Oliveira<[email protected]>

Page 2: Logging e depuração enterprise-level com Log4perl

O que pode dar errado?

Page 3: Logging e depuração enterprise-level com Log4perl

Tudo.

Page 4: Logging e depuração enterprise-level com Log4perl

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

Apagar incêndio é pra bombeiro.

Page 6: Logging e depuração enterprise-level com Log4perl

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

Problemas com o debugging tradicional

● Reativo

● Custoso

● Não escala bem

Page 8: Logging e depuração enterprise-level com Log4perl

Logging tradicional

sub debug {      print “@_\n”;}

...

debug( “cheguei até aqui” );

Page 9: Logging e depuração enterprise-level com Log4perl

Problemas com o logging tradicional

● Reativo

● Custoso

● Não escala bem

Page 10: Logging e depuração enterprise-level com Log4perl

E agora?

● Fazemos o nosso...

● ...não!

Page 11: Logging e depuração enterprise-level com Log4perl

● 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

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

TRACE

DEBUG

INFO

WARN

ERROR

Log levels

FATAL

Page 14: Logging e depuração enterprise-level com Log4perl

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

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

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

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

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

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

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

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

Obrigado!

Dúvidas?