Artigo Java Magazine 05 - Logging no J2SE 1.4

Artigo publicado pela Java Magazine 05.

Esse artigo faz parte da revista Java Magazine edição 05. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.

Logging no J2SE 1.4

Um introdução à API java.util.logging

Como utilizar as novas classes do J2SE 1.4 para melhorar o processo de logging em aplicações Java

Neste artigo trataremos de um aspecto muito importante no desenvolvimento de software, que muitas vezes não é tratado com a devida importância: o uso de mensagens de log – ou logging. O processo de logging é muito importante, pois propicia um canal de comunicação entre a aplicação e o usuário, que pode ser usado pelos desenvolvedores na depuração de aplicações (principalmente em circunstâncias onde não é possível o uso de um software depurador). Para aplicações em  produção, o logging pode ser usado tanto para passar informações úteis ao usuário final quanto para diagnosticar o funcionamento interno da aplicação aos técnicos de suporte.

Embora existam várias soluções de logging para Java no mercado, como o excelente log4j do projeto Apache Jakarta e o Logging Toolkit for Java da IBM, somente na versão 1.4 do J2SE foi introduzida uma API para logging, que analisaremos aqui.

O que é logging?

Traduzindo ao pé da letra, “log” seria o equivalente a anotações ou registro de acontecimentos. Assim, “logging” poderia ser traduzido como o processo de registrar mensagens a partir de uma aplicação. Embora esse conceito possa parecer algo novo, ele é utilizado em muitas aplicações, muitas vezes sem nos darmos conta disso.

Na Listagem 1, por exemplo, está uma pequena aplicação que recebe como parâmetro um número inteiro e cria um servidor na porta definida pelo número passado. Note que estamos usando os objetos System.out e System.err para relatar as ações e exceções da aplicação.

Podemos dizer que o uso de System.out (e System.err) é uma forma primitiva de logging. Essa solução, no entanto, tem muitas desvantagens:

·Falta de flexibilidade; se desejarmos mudar o comportamento do processo de logging, é necessário mudar cada chamada aos métodos de System.out/System .err;

·As mensagens vão sempre para o mesmo destino (o console) e muitas vezes a informação é perdida (a não ser que haja um redirecionamento da saída do console para um arquivo);

·Não há controle se o logging está habilitado ou não; as mensagens serão sempre publicadas;

·As mensagens não recebem formatação especial (poderiam ser formatadas em XML, por exemplo) nem informações adicionais (como a hora em que foram geradas e a classe geradora).

Alternativas

Uma solução intermediária é a criação de uma classe especial para logging. Na Listagem 2 é  usada a classe MyLogger (definida na Listagem 3). Como estamos usando uma classe à parte, as chamadas de logging são mais simples e a flexibilidade muito maior. Se depois decidirmos gravar as mensagens em um arquivo ou desabilitar o logging, basta mudarmos apenas o código na classe de logging (e não em cada chamada a System.out, por exemplo).

Pois bem, a nova API do J2SE 1.4  – e os outros produtos já citados – segue exatamente essa linha de raciocínio. Ela é composta pelo pacote java.util.logging (a Figura 1 mostra o diagrama de classes do pacote).

Conceitos

Antes de continuarmos com uma descrição mais detalhada de cada classe, é importante apresentarmos alguns conceitos utilizados pela API:

Hierarquia – todo objeto Logger (responsável pela criação de mensagens) tem um nome e está associado a outros Loggers através de uma hierarquia de nomes – se um objeto tem o nome a, é o pai do objeto a.b na hierarquia. O significado da hierarquia fica a cargo do desenvolvedor, mas o ideal é seguir a estrutura de pacotes da aplicação (por exemplo: jm5.artigos, jm5.artigos.logging, artigos.logging.rede, artigos.logging.exemplos); outra opção é organizar os objetos segundo suas funcionalidades (por exemplo: " [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados