Introdução ao registro em Java
\nRegistro (logging) é o processo de gravar informações sobre a operação de uma aplicação. Para desenvolvedores Java iniciantes, isso muitas vezes parece uma tarefa secundária, mas na prática, um registro bem configurado economiza horas de depuração e ajuda a encontrar erros rapidamente em produção. Neste artigo, abordaremos as melhores práticas de registro em Java, exploraremos bibliotecas populares e escreveremos exemplos funcionais.
\nUm registro ruim é quando você escreve System.out.println("Aqui está o erro"). Um bom registro são entradas estruturadas com nível de importância, hora e contexto. Vamos aprender a fazer isso corretamente.
Principais bibliotecas para registro
\nEm Java, existem várias soluções padrão e de terceiros. Vamos considerar as três opções mais populares.
\n\nJava Util Logging (JUL)
\nBiblioteca embutida que vem com o JDK. Desvantagem: flexibilidade limitada. Exemplo de uso:
\nimport java.util.logging.Logger;\nimport java.util.logging.Level;\n\npublic class JULExample {\n private static final Logger logger = Logger.getLogger(JULExample.class.getName());\n\n public static void main(String[] args) {\n logger.info("Aplicação iniciada");\n logger.warning("Este é um aviso");\n logger.severe("Erro crítico");\n }\n}\n\nLog4j 2
\nUma das bibliotecas mais poderosas e populares. Suporta registro assíncrono, filtros e configuração flexível. Exemplo de configuração via XML:
\n<?xml version="1.0" encoding="UTF-8"?>\n<Configuration>\n <Appenders>\n <Console name="Console" target="SYSTEM_OUT">\n <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>\n </Console>\n </Appenders>\n <Loggers>\n <Root level="info">\n <AppenderRef ref="Console"/>\n </Root>\n </Loggers>\n</Configuration>\n\nSLF4J + Logback
\nSLF4J é uma fachada (abstração) para vários sistemas de registro. Logback é sua implementação nativa. É o padrão moderno de fato. Exemplo:
\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class SLF4JExample {\n private static final Logger logger = LoggerFactory.getLogger(SLF4JExample.class);\n\n public static void main(String[] args) {\n logger.info("Usuário {} fez login no sistema", "admin");\n try {\n int result = 10 / 0;\n } catch (ArithmeticException e) {\n logger.error("Erro de divisão por zero", e);\n }\n }\n}\n\nMelhores práticas de registro para iniciantes
\nSeguir estas regras tornará seu registro profissional e útil.
\n\n1. Use os níveis de registro corretos
\nEm Java, os seguintes níveis são adotados (do mais importante ao menos importante):
\n- \n
- ERROR — erros críticos que exigem intervenção imediata (por exemplo, perda de conexão com o banco de dados). \n
- WARN — avisos sobre problemas potenciais (por exemplo, uso de API obsoleta). \n
- INFO — eventos importantes da operação da aplicação (inicialização, parada, processamento bem-sucedido de uma requisição). \n
- DEBUG — informações detalhadas para o desenvolvedor (valores de variáveis, etapas do algoritmo). \n
- TRACE — rastreamento extremamente detalhado (geralmente ativado apenas para encontrar bugs específicos). \n
Nunca use System.out.println para registro — você perderá o controle sobre os níveis e o formato.
2. Sempre inclua informações contextuais
\nO log deve responder às perguntas: o que aconteceu, quando, onde e com quais dados. Use mensagens parametrizadas:
\nlogger.info("Pedido {} para o usuário