SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Enterprise-level Logging
     com Log4perl


        Breno G. de Oliveira
         <garu@cpan.org>
O que pode dar errado?
Tudo.
O que pode dar errado?


     Dados externos

     Configurações

     Sistema de arquivos

     Estados inconsistentes

     Casos especiais ou extremos
Apagar incêndio é pra bombeiro.
Logging debugging tradicional


 Chamadas ao “print” espalhadas

 Chamadas “warn” espalhadas

 Dump de estruturas de dados (Data::Dumper)

 Rastreamento (“trace”) manual

 perl -d
Problemas com o debugging tradicional


      ●   Reativo

      ●   Custoso

      ●   Não escala bem
Logging tradicional


  sub debug {
        print “@_n”;
  }

  ...

  debug( “cheguei até aqui” );
Problemas com o logging tradicional


      ●   Reativo

      ●   Custoso

      ●   Não escala bem
E agora?


      ●   Fazemos o nosso...

      ●   ...não!
TIMTOWTDI
              BCINABT

●   There is More Than One Way To Do It...

●   ...But Consistency Is Not A Bad Thing
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
Log levels

                            TRACE

                        DEBUG

                     INFO


                 WARN


               ERROR

             FATAL
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!”;
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 );
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!” );
Arquivos de Configuração

# nivel e alvos, por componentes
log4perl.logger = ERROR, Arq, Tela
log4perl.logger.Foo.Bar = FATAL, Arq, Tela

# log em arquivos
log4perl.appender.Arq = Log::Log4perl::Appender::File
log4perl.appender.Arq.filename=file.log
log4perl.appender.Arq.mode = append
log4perl.appender.Arq.layout=
    Log::Log4perl::Layout::SimpleLayout

# log na tela
log4perl.appender.Tela = Log::Log4perl::Appender::Screen;
log4perl.appender.Tela.layout=
    Log::Log4perl::Layout::PatternLayout
log4perl.appender.layout.ConversionPattern = [%d] %m %n
Appenders

     Log::Dispatch::ApacheLog
     Log::Dispatch::DBI
     Log::Dispatch::Email
     Log::Dispatch::Email::MailSend
     Log::Dispatch::Email::MailSendmail
     Log::Dispatch::Email::MIMELite
     Log::Dispatch::File
     Log::Dispatch::FileRotate
     Log::Dispatch::Handle
     Log::Dispatch::Screen
     Log::Dispatch::Syslog
     Log::Dispatch::Tk
     Log::Dispatch::SNMP
     ...
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)
Outras Opções


 if ( $logger­>is_debug ) {
    foreach my $elemento (@lista_enorme) {
        $logger­>debug( $elemento );
 }


 open my $fh, '<', $filename
   or $logger­>logdie( “$filename: $!” );
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
Obrigado!
Dúvidas?

Mais conteúdo relacionado

Mais procurados

O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3Jose Berardo
 
Desofuscando um webshell em php h2hc Ed.9
Desofuscando um webshell em php h2hc Ed.9Desofuscando um webshell em php h2hc Ed.9
Desofuscando um webshell em php h2hc Ed.9Ricardo L0gan
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13William Colen
 
aula 06 - Logica de programacao
aula 06 - Logica de programacaoaula 06 - Logica de programacao
aula 06 - Logica de programacaoAislan Rafael
 
TASSEL - Trait Analysis by aSSociation, Evolution and Linkage
TASSEL - Trait Analysis by aSSociation, Evolution and LinkageTASSEL - Trait Analysis by aSSociation, Evolution and Linkage
TASSEL - Trait Analysis by aSSociation, Evolution and LinkageMarcos Castro
 
Seminário de Python - LP 1/2015 - Grupo 2
Seminário de Python - LP 1/2015 - Grupo 2Seminário de Python - LP 1/2015 - Grupo 2
Seminário de Python - LP 1/2015 - Grupo 2Allisson Barros
 
Desenvolvimento de web sites com php
Desenvolvimento de web sites com phpDesenvolvimento de web sites com php
Desenvolvimento de web sites com phpbrenod123
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVAMarcio Palheta
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
GraphQL: PUTs, onde foram parar os verbos HTTP?
GraphQL: PUTs, onde foram parar os verbos HTTP?GraphQL: PUTs, onde foram parar os verbos HTTP?
GraphQL: PUTs, onde foram parar os verbos HTTP?Leonardo Gomes
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 

Mais procurados (20)

Parte1c
Parte1cParte1c
Parte1c
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
Desofuscando um webshell em php h2hc Ed.9
Desofuscando um webshell em php h2hc Ed.9Desofuscando um webshell em php h2hc Ed.9
Desofuscando um webshell em php h2hc Ed.9
 
Parte3a
Parte3aParte3a
Parte3a
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Javascript
JavascriptJavascript
Javascript
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13
 
aula 06 - Logica de programacao
aula 06 - Logica de programacaoaula 06 - Logica de programacao
aula 06 - Logica de programacao
 
TASSEL - Trait Analysis by aSSociation, Evolution and Linkage
TASSEL - Trait Analysis by aSSociation, Evolution and LinkageTASSEL - Trait Analysis by aSSociation, Evolution and Linkage
TASSEL - Trait Analysis by aSSociation, Evolution and Linkage
 
Seminário de Python - LP 1/2015 - Grupo 2
Seminário de Python - LP 1/2015 - Grupo 2Seminário de Python - LP 1/2015 - Grupo 2
Seminário de Python - LP 1/2015 - Grupo 2
 
Desenvolvimento de web sites com php
Desenvolvimento de web sites com phpDesenvolvimento de web sites com php
Desenvolvimento de web sites com php
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVA
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Pilhas
PilhasPilhas
Pilhas
 
GraphQL: PUTs, onde foram parar os verbos HTTP?
GraphQL: PUTs, onde foram parar os verbos HTTP?GraphQL: PUTs, onde foram parar os verbos HTTP?
GraphQL: PUTs, onde foram parar os verbos HTTP?
 
TWP40 Revisão Geral 3
TWP40 Revisão Geral 3TWP40 Revisão Geral 3
TWP40 Revisão Geral 3
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 

Semelhante a Log4perl para logging em aplicações Perl

PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentaçãoelliando dias
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeGabriel Machado
 
Struts Cap10 DepuraçãO E Log
Struts Cap10 DepuraçãO E LogStruts Cap10 DepuraçãO E Log
Struts Cap10 DepuraçãO E LogWaldir R. Pires Jr
 
Apresentacao log
Apresentacao logApresentacao log
Apresentacao logpedrohfsd
 
Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com MonologGabriel Machado
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Gabriel Machado
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 

Semelhante a Log4perl para logging em aplicações Perl (11)

PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentação
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
 
Struts Cap10 DepuraçãO E Log
Struts Cap10 DepuraçãO E LogStruts Cap10 DepuraçãO E Log
Struts Cap10 DepuraçãO E Log
 
Certificação LPI
Certificação LPICertificação LPI
Certificação LPI
 
Apresentacao log
Apresentacao logApresentacao log
Apresentacao log
 
Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com Monolog
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 

Mais de garux

Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perlgarux
 
Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)garux
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensagarux
 
Game Development with SDL and Perl
Game Development with SDL and PerlGame Development with SDL and Perl
Game Development with SDL and Perlgarux
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5garux
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4garux
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2garux
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1garux
 
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao MooseOrientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moosegarux
 
Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)garux
 
Jogos em Perl
Jogos em PerlJogos em Perl
Jogos em Perlgarux
 
Novidades no Perl 5.10
Novidades no Perl 5.10Novidades no Perl 5.10
Novidades no Perl 5.10garux
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 

Mais de garux (15)

Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
 
Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
 
Game Development with SDL and Perl
Game Development with SDL and PerlGame Development with SDL and Perl
Game Development with SDL and Perl
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1
 
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao MooseOrientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose
 
Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)Perl Quiz 2009 (YAPC::BR)
Perl Quiz 2009 (YAPC::BR)
 
Jogos em Perl
Jogos em PerlJogos em Perl
Jogos em Perl
 
Novidades no Perl 5.10
Novidades no Perl 5.10Novidades no Perl 5.10
Novidades no Perl 5.10
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 

Log4perl para logging em aplicações Perl