You are on page 1of 10

Portal Java

Tutorial: Tutorial Log4J

Por Guilherme Mello do Nascimento(JavaPlayer)

Introdução

Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j
para indicar os comportamentos de uma aplicação.

O Log4j é um é um projeto open source distribuído 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 não produzirá nenhum logging, mas lançará 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 nós ainda não o configuramos. Existem várias
formas de configurar o Log4j.

A forma mais simples e menos flexível é chamando o método:

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 utilização ou replicação deste material sem prévio aviso.

os seguintes expressões são equivalentes: Logger. será gerada a seguinte saída: 10 [main] DEBUG log.class).com Todos os direitos reservados. static public void main(String[] args) { BasicConfigurator. . Como foi dito anteriormente. 2 – Em toda classe que você deseje utilizar logging. recupere um objeto Logger invocando o método Logger. Logger.HelloWorld – Hello world.log.getLogger(). o Log4j oferece diversas maneiras de configuração.log. • O nome do logger e a mensagem.getLogger(HelloWorld.*.configure(). isto é.class). public class HelloWorld { static Logger logger = Logger.portaljava.getLogger(HelloWorld. • O nível do logger. O objeto Logger é geralmente declarado como static final.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) package log. Receita para utilizar o Log4j em suas aplicações: 1 – Configurar o Log4j para o seu ambiente.getLogger(“com.getLogger(HelloWorld. A saída contém: • O tempo relativo.class. Há uma variação do método Logger."). } } Ao executar a classe acima. o número de millisegundos que transcorreram até a invocação do logging. • O nome da thread invocada entre colchetes. Proibida a utilização ou replicação deste material sem prévio aviso.log4j. Para uma classe HelloWorld em uma pacote com.debug("Hello world. Logger.getName()). logger.apache. Portal Java – A maior comunidade de Java do Brasil – www.getLogger() passando uma String. normalmente o nome da classe completo. import org.HelloWorld’).

Proibida a utilização ou replicação deste material sem prévio aviso.com Todos os direitos reservados.portaljava. • static Level INFO O nível INFO designa informações que focalizam no progresso da aplicação. warn(). • static Level WARN O nível WARN designa situações potencialmente prejudiciais. info().Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) 3 – Utilize a instância de Logger para invocar os métodos: • debug(). No Log4j existem 5 níveis normais de logger disponíveis: • static Level DEBUG O nível DEBUG designa informações úteis para debugar uma aplicação. • static Level ERROR O nível ERROR designa eventos de erro que poderão permitir que a aplicação continue funcionando. Um Appender controla como será a saída do log. Appender O Log4j permite exibir logs em múltiplos destinos. Os Appenders pode ser: Portal Java – A maior comunidade de Java do Brasil – www. • static Level FATAL O nível FATAL designa eventos de erro severos que presumivelmente poderão interromper a aplicação. reside na possibilidade de desabilitar certas declarações de log enquanto outras permitidas são exibidas. Os métodos ALL e OFF são intencionados somente para o gerenciamento.out. O logger é o núcleo do processo de logging. fatal() Ou o método mais genérico: • log() Logger Uma das principais vantagens de qualquer API de logging sobre a simples System. error().println. .

• SMTPAppender Envia um e-mail quando um evento de log específico ocorre. • SocketHubAppender Envia objetos de log para ajuste de servidores de log remotos.err.com Todos os direitos reservados. • TelnetAppender É um Appender especializado em escrever sockets read-only. Utilizando os principais Appenders Portal Java – A maior comunidade de Java do Brasil – www. • WriterAppender Adiciona eventos de log em um Writer ou OutPutStream. • DailyRollingFileAppender Estende FileAppender sobrescrevendo o arquivo.out ou System. • SyslogAppender Envia mensagens para um syslog daemon remoto. usando um layout especificado pelo usuário.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) • ConsoleAppender Eventos de log System. Proibida a utilização ou replicação deste material sem prévio aviso. dependendo da escolha do usuário. . Tipicamente nos erros fatais.portaljava. • FileAppender Adiciona eventos de log em um arquivo. • SocketAppender Envia objetos de log para servidor de log remoto. • RollingFileAppender Estende FileAppender e realiza backup dos arquivos de log dado um certo tamanho.

ou precisamente em System."myfile. Os três principais tipos de layouts são: • HTMLLayout Formata a saída do log como uma tabela HTML. try { appender = new FileAppender(new PatternLayout().new FileOutputStream("filename")). Proibida a utilização ou replicação deste material sem prévio aviso. } catch(Exception e) {} WriterAppender O WriterAppender adiciona eventos para um java. Portal Java – A maior comunidade de Java do Brasil – www. try { appender = new WriterAppender(new PatternLayout().io. Exemplo: FileAppender appender = null. como o nome diz. adiciona eventos de log em um arquivo.Writer. } catch(Exception e) {} Layouts Os layouts são responsáveis pelo formato de saída dos logs.log"). O código acima cria um ConsoleAppender. adiciona no console. FileAppender O FileAppender. Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) ConsoleAppender O ConsoleAppender. uma sub-classe de WriterAppender.out ou System. Exemplo: WriterAppender appender = null.err formatando eventos com o layout especificado pelo usuário.portaljava. . Exemplo: ConsoleAppender appender = new ConsoleAppender(new PatternLayout()).com Todos os direitos reservados. com o default PatternLayout.

com Todos os direitos reservados.addAppender(appender).*.warn("Logando um WARN").portaljava.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) package log. // logando logger.getMessage()).error("Erro: " + e.setLevel((Level) Level.*.log4j.html"). caso ocorra logger.debug("Logando um DEBUG"). } catch(Exception e) { // logando uma exception. .DEBUG). // cria um WriterAppender passando o layout e o file appender = new WriterAppender(layout. public class HTMLExample{ static Logger logger = Logger. import java. public static void main(String args[]){ // cria o layout HTMLLayout layout = new HTMLLayout().getLogger(HTMLExample. logger.info("Logando um INFO"). try { // cria o arquivo HTML FileOutputStream output = new FileOutputStream("output.apache. // ajustando o nível do log logger. } } O resultado será parecido com esse: Portal Java – A maior comunidade de Java do Brasil – www.output). Proibida a utilização ou replicação deste material sem prévio aviso. import org. logger. // cria o appender do tipo WriterAppender WriterAppender appender = null.io.class). } // adicionando o appender criado ao logger logger.

O PatternLayout retorna uma String que pode ser modificada pela conversão de pattern.com Todos os direitos reservados. A conversão de pattern é composta de um literal e de um especificador de conversão. Proibida a utilização ou replicação deste material sem prévio aviso. .portaljava. data. O caractere de conversão controla o tipo de dado para uso: nome do logger. Portal Java – A maior comunidade de Java do Brasil – www.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) • PatternLayout Formata a saída do log baseado em um padrão de conversão. thread. Cada conversão começa com um sinal de porcentagem (%) e é seguido por um modificador de formato opcional e um caractere de conversão.

.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) Relação dos principais caracters de conversão: %C exibe o nome da classe %D exibe a data do evento de log %l exibe o método que chamou o evento de log %L exibe a o número da linha onde o evento de log foi requisitado %m exibe a mensagem %M o método em que o evento de log foi requisitado %p exibe o nível do evento de log %r exibe o número de milisegundos passados desde o início do evento de log %t exibe o nome da thread que gerou o evento de log %n quebra de linha Exemplo: package log.portaljava.class). // criando um PatternLayout passando o output pattern criado PatternLayout layout = new PatternLayout(padrao_log).addAppender(appender). // criando um ConsoleAppender passando o layout criado ConsoleAppender appender = new ConsoleAppender(layout).setLevel((Level) Level. public class PatternLayoutExample{ static Logger logger = Logger. // adicionando o appender ao logger logger.DEBUG). Portal Java – A maior comunidade de Java do Brasil – www.com Todos os direitos reservados. padrao_log += "Classe: %C %n". import org. public static void main(String args[]) { // criando um output pattern String padrao_log = "Milisegundos desde o ínicio do programa: %r %n". padrao_log += "Hora: %d{HH:mm:ss} %n". padrao_log += "Mensagem: %m %n". // ajustando o nível logger.apache. padrao_log += "Data: %d{dd/MM/yyyy} %n". padrao_log += "Local: %l %n".log4j. padrao_log += "----------------------------------------%n".getLogger(PatternLayoutExample. Proibida a utilização ou replicação deste material sem prévio aviso.*.

} } • SimpleLayout Formata a saída do log de uma maneira muito simples: exibindo o nível. logger. logger. a mensagem de log. .DEBUG).true). Proibida a utilização ou replicação deste material sem prévio aviso. Portal Java – A maior comunidade de Java do Brasil – www. caso ocorra logger.com Todos os direitos reservados. } // adicionando o appender criado ao logger logger. public class SimpleLayoutExample{ static Logger logger = Logger."output. true se o arquivo será sobrescrito e false se não for sobrescrito */ appender = new FileAppender(layout.getMessage()).getLogger(SimpleLayoutExample.portaljava.info("Logando um INFO").error("Erro: " + e.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) // logando logger.class).setLevel((Level) Level.addAppender(appender). import org.apache. try{ /* criação do FileAppender passando o layout. public static void main(String args[]){ // cria o layout SimpleLayout layout = new SimpleLayout().*.log". um traço e após. } catch(Exception e){ // logando uma exception.log4j. // cria o appender do tipo FileAppender FileAppender appender = null. nome do arquivo. // ajustando o nível do log logger.debug("Logando um DEBUG"). Exemplo: package log.warn("Logando um WARN").

portaljava. críticas ou sugestões: javaplayer@hotmail.info("Logando um INFO").com Referências – Log4j The Complete Manual Portal Java – A maior comunidade de Java do Brasil – www. } } Até a próxima !!! Comentários.Portal Java Tutorial: Tutorial Log4J Por Guilherme Mello do Nascimento(JavaPlayer) // logando logger.com Todos os direitos reservados. Proibida a utilização ou replicação deste material sem prévio aviso. .