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)


Responder a