Usando logging no JDK 1.4 Um dos recursos adicionados ao JDK 1.4 foi o pacote java.util.logging que permite que aplicações Java façam o uso de Logging, algo como o bastante utilizado System.out.println(), mas de forma eficiente, rápida e prática.
O exemplo abaixo é alteração da classe ConcatStringBuffer, que já foi utilizada aqui no Dicas-List, mas que agora faz o uso do pacote de Logging. import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.LogManager; public class ConcatStringBuffer { private static Logger theLogger = Logger.getLogger(ConcatStringBuffer.class.getName()); public static void main(String args[]) { java.util.Date inicio = new java.util.Date(); theLogger.fine("Inicio: "+ inicio); StringBuffer var = new StringBuffer(); for (int i=0; i<10000; i++ ) { var.append(i); } java.util.Date fim = new java.util.Date(); theLogger.fine("Fim..: "+ fim); theLogger.info("Tempo: "+ (fim.getTime() - inicio.getTime())+ " milisegundos"); } } No exemplo acima os logs que apresentam os tempos de início e fim são classificadas no nível FINE e o último log, que mostra o tempo total de execução, tem o nível INFO. O Logging tem 5 níveis indo do mais baixo, FINEST, utilizado para informações como Debug, até o mais alto, o SEVERE utilizada para mensagens de erros graves no sistema. A ordem é: FINEST - FINER - FINE - CONFIG - INFO - WARNING - SEVERE Ao executar o exemplo acima a saída no console será: Sep 2, 2002 3:41:32 PM ConcatStringBuffer main INFO: Tempo: 251 milisegundos Apenas o logging de nível INFO foi impresso porque por default a JVM utiliza o arquivo logging.properties localizado no diretório %JAVA_HOME%/JRE/lib. Este arquivo está configurado, também por default, para imprimir apenas dos níveis de INFO ou acima. Uma alternativa é criar um arquivo de configuração de LOG para a sua aplicação e então customizar este arquivo. O exemplo abaixo é um arquivo de configuração simplifacado que envia as mensagens de LOG para o console e também para um arquivo arquivo físico java.log. Este arquivo de configuração pode ter qualquer nome, mas aqui vou chamá-lo de log.properties. ######################################################################## handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler # Default global logging level. .level= FINEST java.util.logging.FileHandler.pattern = ./java.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter #java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter # Limita as mensagens que são impressas no console para INFO e acima java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ######################################################################### Colocando este arquivo (log.properties) no mesmo diretório onde está o ConcatStringBuffer.class você pode executar a classe enviando como parâmetro para a JVM o local onde esta o arquivo, em nosso exemplo no mesmo diretório. java -Djava.util.logging.config.file=log.properties ConcatStringBuffer A saída desta execução vai mostrar no console a mensagem: Sep 2, 2002 4:05:10 PM ConcatStringBuffer main INFO: Tempo: 180 milisegundos E no arquivo java.log a saída será um arquivo XML, já que no arquivo log.properties foi configurado para o FileHandler a saída XMLFormatter. <?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2002-09-02T16:05:10</date> <millis>1030993510412</millis> <sequence>0</sequence> <logger>ConcatStringBuffer</logger> <level>FINE</level> <class>ConcatStringBuffer</class> <method>main</method> <thread>10</thread> <message>Inicio: Mon Sep 02 16:05:10 BRT 2002</message> </record> <record> <date>2002-09-02T16:05:10</date> <millis>1030993510472</millis> <sequence>1</sequence> <logger>ConcatStringBuffer</logger> <level>FINE</level> <class>ConcatStringBuffer</class> <method>main</method> <thread>10</thread> <message>Fim..: Mon Sep 02 16:05:10 BRT 2002</message> </record> <record> <date>2002-09-02T16:05:10</date> <millis>1030993510472</millis> <sequence>2</sequence> <logger>ConcatStringBuffer</logger> <level>INFO</level> <class>ConcatStringBuffer</class> <method>main</method> <thread>10</thread> <message>Tempo: 180 milisegundos</message> </record> </log> O LOG4J também é uma API para logging desenvolvida pelo Jakarta/Apache e que surgiu antes da especificação de logging do JDK e é bastante utilizada em vários projetos Java em todo o mundo. Vale a pena conhecer: http://jakarta.apache.org/log4j O pacote Protomatter, também já citado aqui no Dicas-List como uma implementação de Pool de Conexões JDBC, também possui uma API para Logging e é bem prática de usar, principalmente quando usado com o Tomcat. http://protomatter.sourceforge.net/1.1.8-pre5/index.html O Lumberjack é um projeto Open Source que fornece uma implementação do java.util.logging para as versões 1.2 e 1.3 do JDK. http://javalogging.sourceforge.net/ A intenção do dicas-list é apenas apontar um caminho, vários datalhes sobre Logging não foram citados por falta de espaço mas você encontrará mais informações nos links abaixo: An Introduction to the Java Logging API http://www.onjava.com/pub/a/onjava/2002/06/19/log.html Java Logging Overview http://java.sun.com/j2se/1.4/docs/guide/util/logging/overview.html Logging 1.4 JAVADOC API http://java.sun.com/j2se/1.4/docs/api/java/util/logging/package-summary.html Bons códigos!!! ______________________________________________________________________________ Handerson Ferreira Gomes Summa Technologies Boletim Dicas Java - Sua dose diária de Java. ================================================================================ [dicas-list] circula diariamente com pequenas dicas sobre a plataforma Java e é mais um serviço da Sociedade de Usuários Java - http://www.soujava.org.br *** SouJava - Fortalecendo a Comunidade Java Brasileira! *** - Para contribuir com uma dica, envie um e-mail para [EMAIL PROTECTED] - Participe de outras listas de discussão sobre a linguagem Java. Saiba mais em http://www.soujava.org.br/lista.htm -------------------------------------------------------------------------------- - Para assinar este boletim: mailto:[EMAIL PROTECTED] - Para cancelar sua assinatura: mailto:[EMAIL PROTECTED] - Dicas anteriores: http://www.mail-archive.com/dicas-list%40soujava.org.br - Para discutir sobre as dicas, acesse o Mundo OO (http://www.mundooo.com.br)