O que é esta biblioteca e para que serve
\n\nLog4j 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\nPara 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
- 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
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\nInstalação
\n\nPara 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\nMaven (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\nGradle (build.gradle)
\ndependencies {\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\nApós adicionar as dependências, crie o arquivo de configuração log4j2.xml na pasta src/main/resources:
<?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\nInício rápido com exemplo de código
\n\nCrie uma classe Java simples para demonstração:
\nimport 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\nA saída no console será assim:
\n14:30:15.123 [main] INFO QuickStart - Aplicação iniciada\n14:30:15.125 [main] WARN Q