Neste tutorial, aprenderemos sobre o Java Logging e seus vários componentes com a ajuda de exemplos.
Java nos permite criar e capturar mensagens de log e arquivos por meio do processo de log.
Em Java, o registro requer estruturas e APIs. Java possui uma estrutura de registro integrada no java.util.logging
pacote.
Também podemos usar estruturas de terceiros como Log4j, Logback e muitos mais para fins de registro.
Componentes de registro Java
A figura abaixo representa os componentes principais e o fluxo de controle da API Java Logging ( java.util.logging
).

1. Logger
A Logger
classe fornece métodos para registro. Podemos instanciar objetos da Logger
classe e chamar seus métodos para fins de registro.
Vamos dar um exemplo.
Logger logger = Logger.getLogger("newLoggerName");
O getLogger()
método da Logger
classe é usado para encontrar ou criar um novo Logger
. O argumento string define o nome do logger.
Aqui, isso cria um novo Logger
objeto ou retorna um existente Logger
com o mesmo nome.
É uma convenção definir um Logger
após a classe atual usando class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Nota: Este método irá lançar NullPointerException
se o nome passado for null
.
Cada Logger
um possui um nível que determina a importância da mensagem de log. Existem 7 níveis básicos de registro:
Nível de registro (em ordem decrescente) | Usar |
---|---|
FORTE | falha grave |
ATENÇÃO | mensagem de aviso, um problema potencial |
INFO | informações gerais de tempo de execução |
CONFIG | informação de configuração |
BEM | informações gerais do desenvolvedor (mensagens de rastreamento) |
FINER | informações detalhadas do desenvolvedor (mensagens de rastreamento) |
FINEST | informações altamente detalhadas do desenvolvedor (mensagens de rastreamento) |
FORA | desligue o registro para todos os níveis (não capture nada) |
TODOS | ligue o registro para todos os níveis (capture tudo) |
Cada nível de log possui um valor inteiro que determina sua gravidade, exceto para dois níveis de log especiais OFF
e ALL
.
Registrando a mensagem
Por padrão, os três níveis de log principais são sempre registrados. Para definir um nível diferente, podemos usar o seguinte código:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
Neste exemplo, apenas o nível FINE
e os níveis acima dele são definidos para serem registrados. Todas as outras mensagens de log são descartadas.
Agora, para registrar uma mensagem, usamos o log()
método.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Existem métodos abreviados para registrar nos níveis desejados.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Todas as solicitações de log que passaram do nível de log definido são então encaminhadas para o LogRecord .
Observação: se o nível de um logger for definido como null
, seu nível será herdado de seu pai e assim por diante na árvore.
2. Filtros
Um filtro (se houver) determina se o LogRecord deve ser encaminhado ou não. Como o nome sugere, ele filtra as mensagens de log de acordo com critérios específicos.
Um LogRecord só é passado do criador de logs para o manipulador de log e do manipulador de log para sistemas externos se passar nos critérios especificados.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Manipuladores (Anexos)
O manipulador de log ou os appenders recebem o LogRecord e o exportam para vários destinos.
Java SE fornece 5 gerenciadores integrados:
Handlers | Usar |
---|---|
StreamHandler | escreve para um OutputStream |
ConsoleHandler | escreve para o console |
FileHandler | grava no arquivo |
SocketHandler | grava em portas TCP remotas |
MemoryHandler | escreve na memória |
Um manipulador pode passar o LogRecord para um filtro para determinar novamente se ele pode ser encaminhado para sistemas externos ou não.
Para adicionar um novo manipulador, usamos o seguinte código:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Para remover um manipulador, usamos o seguinte código:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Um logger pode ter vários manipuladores. Para obter todos os manipuladores, usamos o seguinte código:
Handler() handlers = logger.getHandlers();
4. Formatadores
Um manipulador também pode usar um Formatter para formatar o objeto LogRecord em uma string antes de exportá-lo para sistemas externos.
Java SE tem dois formatadores integrados :
Formatadores | Usar |
---|---|
SimpleFormatter | formata LogRecord para string |
XMLFormatter | formata LogRecord em formato XML |
Podemos usar o seguinte código para formatar um manipulador:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
O objeto LogManager controla as informações de registro global. Ele lê e mantém a configuração de registro e as instâncias do registrador.
O gerenciador de log é um singleton, o que significa que apenas uma instância dele é instanciada.
Para obter a instância do gerenciador de log, usamos o seguinte código:
LogManager manager = new LogManager();
Vantagens de registro
Aqui estão algumas das vantagens do registro em Java.
- ajuda no monitoramento do fluxo do programa
- ajuda a capturar quaisquer erros que possam ocorrer
- fornece suporte para diagnóstico de problemas e depuração