Olá, pessoal!
Começo esta coluna pedindo desculpas pelo atraso esta semana e por possíveis e-mails não respondidos. Esta semana tive um pequeno problema com o host do meu site que, simplesmente, parou de nos prestar o serviço, provocando assim o não recebimento de TODOS os e-mails enviados entre Domingo e ontem 20:00. Desculpem-me pelo transtorno.
Vamos ao nosso artigo. Falaremos hoje sobre a API
de log do JAVA.
Let's rock!
A API
A API de logging permite que um programa, um servlet, um applet,
ou qualquer outra aplicação JAVA gere mensagens a partir da aplicação.
Um recurso interessante para manter o desenvolvedor, e até mesmo
o usuário, a par de erros, resultados de operações, recursos acessados
e outras informações pertinentes ao sistema.
Para garantir que o mecanismo de log não afetasse a performance
do sistema, a API foi desenvolvida de modo que o log fosse gerado
da forma mais inexpressível possível.
Para tanto, a API possui um mecanismo que define dinamicamente
quais mensagens serão geradas, minimizando assim o impacto da
operação durante a execução normal do sistema.
A API possui também interfaces e superclasses que permitem que
o desenvolvendor extenda a mesma, podendo assim criar uma classe
personalizada de log.
A API está no pacote java.util.logging e é constituída pelas seguintes
classes e interfaces:
. ConsoleHandler
. FileHander
. Filter
. Formatter
. Handler
. Level
. Logger
. LoggingPermission
. LogManager
. LogRecord
. MemoryHandler
. SimpleFormatter
. SocketHandler
. StreamHandler
. XMLFormatter
Codificando
Agora vejamos um pequeno exemplo da utilização da API de logging:
O código abaixo criará um logger.
Desde que usemos um logger por classe, podemos
manter um campo estático para nossa classe.
Utilizamos o nome completo da classe como nome do logger.
A API de log possui um arquivo de configuração ($JAVA_HOME/jre/lib/logging.properties) que por default fornece um mecanismo que enviará as mensagens no formato de LogRecord para o console(System.err).
package exemplo.logger;
import java.util.logging.Logger;
public class exemploLogger {
private static Logger logador = Logger.getLogger(exemploLogger.class.getName());
public static void main(String[] args) {
exemploLogger ex = new exemploLogger("Mensagem no log");
ex.gravaLog();
}
private String mensagem;
public exemploLogger(String mensagem) {
this.mensagem = mensagem;
}
public void gravaLog() {
logador.finest(this.mensagem);
System.err.println("Gravou no log:" +this.mensagem);
}
}
Perceba que no código acima foi utilizado o método "finest" para
gravar o log. Isso se deve ao nível de log implementado na aplicação.
Perceba também que ao rodarmos a aplicação, será exibida somente
a mensagem "Gravou no log: Mensagem no log". Isso deve-se ao nível
de log que utilizamos na geração da mensagem. Veremos mais a frente
uma explicação para isso.
Níveis de log
Veremos abaixo rapidamente os níveis de log disponíveis na API.
Podemos trabalhar com 7 níveis de log para definir a importância
das mensagens.
São eles:
. SEVERE
- O nível mais alto de log. Utilizado para mensagens extremamente
importantes.
. WARNING
- Mensagens de aviso.
. INFO
- Para mensagens em tempo de execução.
. CONFIG
- Mensagens de informação a respeito de configurações.
. FINE
- Utilizado para detalhar a informação. Geralmente está presente
em sessões de debug.
. FINER
- O mesmo que FINE, porém mais detalhado.
. FINEST
- O mesmo que FINE e FINER, porém com o nível mais alto de detalhamento
dentre eles.
Além desses níveis, temos o nível "ALL", que habilita todos os níveis de log. Temos também o nível "OFF" que é usado para desativar o logging.
É possível também definir níveis personalizados, mas trataremos nesse artigo somente os níveis fornecidos pela API.
Algumas explicações
Agora podemos entender o motivo pelo qual nossa mensagem de log
não apareceu quando executamos a aplicação. Utilizamos o método
finest(), que gera um registro de log no nível Level.FINEST. Por
default, somente registros com o nível Level.INFO ou maior serão
enviados para o console.
Se quisermos fazer com que nossa mensagem apareça
no console, devemos aumentar o nível de log como no exemplo abaixo:
package exemplo.logger;
import java.util.logging.Logger;
public class exemploLogger {
private static Logger logador = Logger.getLogger(exemploLogger.class.getName());
public static void main(String[] args) {
exemploLogger ex = new exemploLogger("Mensagem no log");
ex.gravaLog();
}
private String mensagem;
public exemploLogger(String mensagem) {
this.mensagem = mensagem;
}
public void gravaLog() {
logador.info(this.mensagem);
System.err.println("Gravou no log:" +this.mensagem);
}
}
Agora, se rodarmos o programa, veremos uma saída
como a seguinte:
INFO; 992149105222ms; 3207485;# 1; exemplo.logger.exemploLogger;
gravaLog; Mensagem no log Gravou no log: Mensagem no log
Bom, pessoal. Ficamos por aqui essa semana. Um abraço e até a próxima.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.