Você está na página 1de 10

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) Introduo Hoje em dia muito comum utilizar

r uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicao. O Log4j um um projeto open source distribudo pela Apache Software License e foi portado por autores independentes a C, C++, Python, ruby, Eiffel. Instalando Para utilizar o Log4j, voc precisa: Baixar o Log4j: http://logging.apache.org/site/binindex.cgi Adicionar o jar do Log4j no classpath

Lo4j Hello World package log; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; public class HelloWorld { static Logger logger = Logger.getLogger(HelloWorld.class); static public void main(String[] args) { logger.debug("Hello world."); } } Ao executar essa classe, ele no produzir nenhum logging, mas lanar o seguinte warning: log4j:WARN No appenders could be found for logger (log.HelloWorld). log4j:WARN Please initialize the log4j system properly. O Log4j est reclamando porque ns ainda no o configuramos. Existem vrias formas de configurar o Log4j. A forma mais simples e menos flexvel chamando o mtodo: BasicConfigurator.configure(); Agora que j sabemos a causa dos warnings gerados, vamos modificar a classe HelloWorld.

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) package log; import org.apache.log4j.*; public class HelloWorld { static Logger logger = Logger.getLogger(HelloWorld.class); static public void main(String[] args) { BasicConfigurator.configure(); logger.debug("Hello world."); }

Ao executar a classe acima, ser gerada a seguinte sada: 10 [main] DEBUG log.HelloWorld Hello world. A sada contm: O tempo relativo, isto , o nmero de millisegundos que transcorreram at a invocao do logging. O nome da thread invocada entre colchetes. O nvel do logger. O nome do logger e a mensagem.

Receita para utilizar o Log4j em suas aplicaes: 1 Configurar o Log4j para o seu ambiente. Como foi dito anteriormente, o Log4j oferece diversas maneiras de configurao. 2 Em toda classe que voc deseje utilizar logging, recupere um objeto Logger invocando o mtodo Logger.getLogger() passando uma String, normalmente o nome da classe completo. O objeto Logger geralmente declarado como static final. H uma variao do mtodo Logger.getLogger(). Para uma classe HelloWorld em uma pacote com.log, os seguintes expresses so equivalentes: Logger.getLogger(com.log.HelloWorld); Logger.getLogger(HelloWorld.class.getName()); Logger.getLogger(HelloWorld.class);

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) 3 Utilize a instncia de Logger para invocar os mtodos: debug(), info(), warn(), error(), fatal() Ou o mtodo mais genrico: log() Logger Uma das principais vantagens de qualquer API de logging sobre a simples System.out.println, reside na possibilidade de desabilitar certas declaraes de log enquanto outras permitidas so exibidas. O logger o ncleo do processo de logging. No Log4j existem 5 nveis normais de logger disponveis: static Level DEBUG

O nvel DEBUG designa informaes teis para debugar uma aplicao. static Level INFO

O nvel INFO designa informaes que focalizam no progresso da aplicao. static Level WARN

O nvel WARN designa situaes potencialmente prejudiciais. static Level ERROR

O nvel ERROR designa eventos de erro que podero permitir que a aplicao continue funcionando. static Level FATAL

O nvel FATAL designa eventos de erro severos que presumivelmente podero interromper a aplicao. Os mtodos ALL e OFF so intencionados somente para o gerenciamento. Appender O Log4j permite exibir logs em mltiplos destinos. Um Appender controla como ser a sada do log. Os Appenders pode ser:

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer)

ConsoleAppender

Eventos de log System.out ou System.err, usando um layout especificado pelo usurio. DailyRollingFileAppender

Estende FileAppender sobrescrevendo o arquivo. FileAppender

Adiciona eventos de log em um arquivo. RollingFileAppender

Estende FileAppender e realiza backup dos arquivos de log dado um certo tamanho. WriterAppender

Adiciona eventos de log em um Writer ou OutPutStream, dependendo da escolha do usurio. SMTPAppender

Envia um e-mail quando um evento de log especfico ocorre. Tipicamente nos erros fatais. SocketAppender

Envia objetos de log para servidor de log remoto. SocketHubAppender

Envia objetos de log para ajuste de servidores de log remotos. SyslogAppender

Envia mensagens para um syslog daemon remoto. TelnetAppender

um Appender especializado em escrever sockets read-only. Utilizando os principais Appenders

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) ConsoleAppender O ConsoleAppender, como o nome diz, adiciona no console, ou precisamente em System.out ou System.err formatando eventos com o layout especificado pelo usurio. Exemplo: ConsoleAppender appender = new ConsoleAppender(new PatternLayout()); O cdigo acima cria um ConsoleAppender, com o default PatternLayout. FileAppender O FileAppender, uma sub-classe de WriterAppender, adiciona eventos de log em um arquivo. Exemplo: FileAppender appender = null; try { appender = new FileAppender(new PatternLayout(),"myfile.log"); } catch(Exception e) {} WriterAppender O WriterAppender adiciona eventos para um java.io.Writer. Exemplo: WriterAppender appender = null; try { appender = new WriterAppender(new PatternLayout(),new FileOutputStream("filename")); } catch(Exception e) {} Layouts Os layouts so responsveis pelo formato de sada dos logs. Os trs principais tipos de layouts so: HTMLLayout

Formata a sada do log como uma tabela HTML.

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) package log; import java.io.*; import org.apache.log4j.*; public class HTMLExample{ static Logger logger = Logger.getLogger(HTMLExample.class); public static void main(String args[]){ // cria o layout HTMLLayout layout = new HTMLLayout(); // cria o appender do tipo WriterAppender WriterAppender appender = null; try { // cria o arquivo HTML FileOutputStream output = new FileOutputStream("output.html"); // cria um WriterAppender passando o layout e o file appender = new WriterAppender(layout,output);

} catch(Exception e) { // logando uma exception, caso ocorra logger.error("Erro: " + e.getMessage()); }

// adicionando o appender criado ao logger logger.addAppender(appender); // ajustando o nvel do log logger.setLevel((Level) Level.DEBUG); // logando logger.debug("Logando um DEBUG"); logger.info("Logando um INFO"); logger.warn("Logando um WARN");

} }

O resultado ser parecido com esse:

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer)

PatternLayout

Formata a sada do log baseado em um padro de converso. O PatternLayout retorna uma String que pode ser modificada pela converso de pattern. A converso de pattern composta de um literal e de um especificador de converso. Cada converso comea com um sinal de porcentagem (%) e seguido por um modificador de formato opcional e um caractere de converso. O caractere de converso controla o tipo de dado para uso: nome do logger, data, thread.

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer)

Relao dos principais caracters de converso: %C %D %l %L %m %M %p %r %t %n exibe o nome da classe exibe a data do evento de log exibe o mtodo que chamou o evento de log exibe a o nmero da linha onde o evento de log foi requisitado exibe a mensagem o mtodo em que o evento de log foi requisitado exibe o nvel do evento de log exibe o nmero de milisegundos passados desde o incio do evento de log exibe o nome da thread que gerou o evento de log quebra de linha

Exemplo: package log; import org.apache.log4j.*; public class PatternLayoutExample{ static Logger logger = Logger.getLogger(PatternLayoutExample.class); public static void main(String args[]) { // criando um output pattern String padrao_log = "Milisegundos desde o nicio do programa: %r %n"; padrao_log += "Classe: %C %n"; padrao_log += "Data: %d{dd/MM/yyyy} %n"; padrao_log += "Hora: %d{HH:mm:ss} %n"; padrao_log += "Local: %l %n"; padrao_log += "Mensagem: %m %n"; padrao_log += "----------------------------------------%n"; // criando um PatternLayout passando o output pattern criado PatternLayout layout = new PatternLayout(padrao_log); // criando um ConsoleAppender passando o layout criado ConsoleAppender appender = new ConsoleAppender(layout); // adicionando o appender ao logger logger.addAppender(appender); // ajustando o nvel logger.setLevel((Level) Level.DEBUG);

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) // logando logger.debug("Logando um DEBUG"); logger.info("Logando um INFO"); logger.warn("Logando um WARN"); } }

SimpleLayout

Formata a sada do log de uma maneira muito simples: exibindo o nvel, um trao e aps, a mensagem de log. Exemplo: package log; import org.apache.log4j.*; public class SimpleLayoutExample{ static Logger logger = Logger.getLogger(SimpleLayoutExample.class); public static void main(String args[]){ // cria o layout SimpleLayout layout = new SimpleLayout(); // cria o appender do tipo FileAppender FileAppender appender = null; try{ /* criao do FileAppender passando o layout, nome do arquivo, true se o arquivo ser sobrescrito e false se no for sobrescrito */ appender = new FileAppender(layout,"output.log",true);

} catch(Exception e){ // logando uma exception, caso ocorra logger.error("Erro: " + e.getMessage()); } // adicionando o appender criado ao logger logger.addAppender(appender); // ajustando o nvel do log logger.setLevel((Level) Level.DEBUG);

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer)

} }

// logando logger.info("Logando um INFO");

At a prxima !!! Comentrios, crticas ou sugestes: javaplayer@hotmail.com Referncias Log4j The Complete Manual

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.