Edgard Leal

My personal blog hosted on Github using Jekyll

Home View on GitHub
17 January 2013
System.out.println(e.getMessage());
Este é talves, o maior motivo para querer-mos utilizar uma ferramenta para gestão dos processos de log.
Enquanto estamos desenvolvendo, é comum o uso do sysout, para registro e ate "depuração" do código, o problema começa quando o sistema vai para a produção e ocorrem erros misteriosos e o usuario nunca sabe realmente informar o que aconteceu.

O log4j propõe resolver este problema, não apenas registrando as mensagens em arquivos para encapsulando todo o processo que envolve os registros de log, como formatação das saidas, inclusão de data e hora, backup do log e outros.

Para utilização desta API, basta fazer o download do arquivo .jar e adiciona-lo ao buildpath da aplicação. 
 
No caso de uma aplicação web, basta colar o arquivo na pasta "lib"  do projeto.

  
BasicConfigurator.configure();
Logger logger = Logger.getLogger(this.getClass());
logger.info("Sistema iniciado");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
logger.warn("Mensagem de alerta");
logger.error("Log de erro");
Na primeira linha, foi usada uma configuração básica 
Na segunda linha iniciamos a classe que registra o log.
Esta configuração não resolve muita coisa porque apenas registra no console as saidas informadas:

0 [localhost-startStop-1] INFO com.edgardleal.ClassTest  - Sistema iniciado
500 [localhost-startStop-1] WARN
com.edgardleal.ClassTest  - Mensagem de alerta
500 [localhost-startStop-1] ERROR com.edgardleal.ClassTest  - Log de erro

A primeira coluna indica o tempo decorrido deste a inicialização da classe Logger
2º Thread que esta sendo executada no momento
3º Nível do log
4º Classe que executou o log
5º Mensagem informada

Para que tenha-mos um log realmente útil precisaremos criar um arquivo de configurações para definirmos nossas preferencias e termos um resultado como o do exemplo abaixo:

INFO localhost-startStop-1 15:33:42.017 com.edgardleal.ClassTest - Sistema iniciado
WARN localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest - Mensagem de alerta
ERROR localhost-startStop-1 15:33:42.517 com.edgardleal.ClassTest - Log de erro

Crie um arquivo com o nome "log.properties" com o seguinte coneudo:

  log4j.rootLogger=DEBUG, sysout
log4j.appender.sysout=org.apache.log4j.RollingFileAppender
log4j.appender.sysout.layout=org.apache.log4j.PatternLayout
log4j.appender.sysout.File=log.txt
log4j.appender.sysout.File=log.txt
log4j.appender.sysout.File=log.txt
log4j.appender.sysout.layout.ConversionPattern=%p %t %d{HH:mm:ss.SSS} %c - %m%n
log4j.appender.sysout.MaxFileSize=5KB
log4j.appender.sysout.MaxBackupIndex=2

1º Nome o layout de configuração
2º Tipo de layout utilizado ( o arquivo continua crescendo )
3º Formatação utilizada, neste caso, utilizaremos o padrão informado abaixo
4º Nome do arquivo de log
5º Mascara utilizada para gerar o resultado
6º Tamanho máximo do arquivo de log
7º Número máximo de backups mantidos
 
E alteramos o código anterior para que fique da seguinte forma:

  PropertyConfigurator.configure("log.properties");
Logger logger = Logger.getLogger(this.getClass());
logger.info("Sistema iniciado");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
logger.warn("Mensagem de alerta");
logger.error("Log de erro");

  

Na primeira linha do código, iniciamos a configuração global do log com o arquivo "log.properties"

Veja a documentação completa



blog comments powered by Disqus