Log4j 2 / SLF4J para Java: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é esta biblioteca e para que serve

\n\n

Log4j 2 e SLF4J são duas bibliotecas interligadas para logging em Java, que são o padrão de facto no mundo do desenvolvimento corporativo. SLF4J (Simple Logging Facade for Java) é uma fachada (abstração) que fornece uma API unificada para diferentes frameworks de logging. Log4j 2 é uma das implementações mais poderosas e performáticas desta API.

\n\n

Para que serve? Logging é o processo de registrar informações sobre a execução de uma aplicação: erros, avisos, mensagens informativas, informações de depuração. Sem um sistema de logging, os desenvolvedores são forçados a usar System.out.println(), o que leva a:

\n
    \n
  • Impossibilidade de gerenciar a saída de forma flexível (ativar/desativar logs para diferentes partes da aplicação)
  • \n
  • Ausência de níveis de logging (INFO, WARN, ERROR, DEBUG)
  • \n
  • Problemas de desempenho (concatenação de strings mesmo quando os logs estão desativados)
  • \n
  • Ausência de formatos de saída (data, hora, nome da classe, thread)
  • \n
\n\n

Log4j 2 resolve todos esses problemas. Ele suporta logging assíncrono, filtros, appenders (saída para arquivo, console, banco de dados, rede), rotação de logs e muitas outras funcionalidades avançadas. SLF4J permite, se necessário, mudar de Log4j 2 para Logback ou java.util.logging sem alterar o código.

\n\n

Instalação

\n\n

Para projetos Java, a instalação é feita através de sistemas de build Maven ou Gradle. Ao contrário de Python (pip) ou Node.js (npm), em Java o gerenciamento de dependências é feito através de arquivos de configuração.

\n\n

Maven (pom.xml)

\n
<!-- SLF4J API + Log4j 2 como implementação -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-slf4j-impl</artifactId>\n    <version>2.20.0</version>\n</dependency>\n\n<!-- API principal do Log4j 2 (se não usar SLF4J) -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-core</artifactId>\n    <version>2.20.0</version>\n</dependency>
\n\n

Gradle (build.gradle)

\n
dependencies {\n    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'\n    implementation 'org.apache.logging.log4j:log4j-core:2.20.0'\n}
\n\n

Após adicionar as dependências, crie o arquivo de configuração log4j2.xml na pasta src/main/resources:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="WARN">\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\n

Início rápido com exemplo de código

\n\n

Crie uma classe Java simples para demonstração:

\n
import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class QuickStart {\n    // Criamos o logger para a classe atual\n    private static final Logger logger = LoggerFactory.getLogger(QuickStart.class);\n\n    public static void main(String[] args) {\n        logger.info("Aplicação iniciada");\n        logger.debug("Esta é uma mensagem de depuração");\n        logger.warn("Aviso: recursos estão se esgotando");\n        logger.error("Erro crítico: {}", "divisão por zero");\n\n        try {\n            int result = 10 / 0;\n        } catch (ArithmeticException e) {\n            logger.error("Erro ao calcular", e);\n        }\n    }\n}
\n\n

A saída no console será assim:

\n
14:30:15.123 [main] INFO  QuickStart - Aplicação iniciada\n14:30:15.125 [main] WARN  Q                    

Recommendations