Configurando o Logback
Appenders, padrões e níveis.
Configurando o Logback é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
O que é o Logback?
Logback é uma implementação de suporte popular do SLF4J, escrita pelo mesmo autor do Log4j. Ele realiza de fato o registro descrito pelas chamadas do SLF4J.
Você o configura com um arquivo chamado logback.xml no caminho de classes, geralmente em src/main/resources.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback reads logback.xml at startup");
}
}Três componentes básicos
A configuração do Logback tem três conceitos fundamentais:
- Logger: fonte nomeada de eventos de registro, com um nível.
- Anexador: um destino, como o console ou um arquivo.
- Codificador/formato: transforma o evento em texto.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("logger -> appender -> encoder -> output");
}
}Um anexador de console
A configuração mais simples envia tudo para o console. O padrão do codificador controla o formato da linha.
Este XML fica em logback.xml, não no seu código Java.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Entendendo o padrão
As palavras de conversão do padrão começam com %:
%dindica o registro de data e hora;%level, o nível.%loggerindica o nome do registrador;%thread, o encadeamento.%msgindica sua mensagem;%n, uma nova linha.
%-5level preenche o lado esquerdo do nível com espaços até a largura 5.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// Output rendered by pattern: time LEVEL logger - message
log.info("hello");
}
}O registrador raiz e os níveis
O elemento <root> define o nível padrão de toda a aplicação e os anexadores para os quais ela escreve.
Definir level="info" significa que INFO, WARN e ERROR serão emitidos; DEBUG e TRACE serão suprimidos.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Níveis por pacote
Adicione um elemento <logger> para substituir o nível de um pacote. Assim, você pode ativar DEBUG para seu próprio código e manter as bibliotecas silenciosas.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.app" level="debug" />
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Um anexador de arquivo rotativo
Em produção, geralmente você grava em arquivos que alternam diariamente ou por tamanho, para que os registros não cresçam sem limite.
O RollingFileAppender com uma política baseada em tempo cria um arquivo por dia e mantém um histórico limitado.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>Vários anexadores ao mesmo tempo
O registrador raiz pode referenciar vários anexadores, fazendo com que os registros sejam enviados simultaneamente para o console e para um arquivo.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %msg%n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>Exibindo o MDC
Para incluir o contexto do MDC, como um identificador de solicitação, em todas as linhas, adicione %X{key} ao padrão.
Então, qualquer valor colocado no MDC aparecerá automaticamente.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
MDC.put("requestId", "req-1234");
// Pattern: %X{requestId} %-5level %msg%n
log.info("handled");
MDC.clear();
}
}Aditividade
Por padrão, os eventos de um registrador também são enviados aos anexadores de seus ancestrais. Isso é a aditividade.
Se um registrador de pacote tiver seu próprio anexador e você não quiser uma saída duplicada, defina additivity="false" nele.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.audit" level="info" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Recarregamento automático e variáveis
O Logback pode recarregar a configuração periodicamente com <configuration scan="true">, o que é útil para alterar níveis sem reiniciar a aplicação.
Você também pode ler propriedades, como um diretório de registros, com marcadores de posição ${LOG_DIR}.
<configuration scan="true" scanPeriod="30 seconds">
<property name="LOG_DIR" value="logs" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info"><appender-ref ref="FILE" /></root>
</configuration>Verificação rápida
Verifique seus conhecimentos sobre a configuração do Logback.
Recapitulação
Você aprendeu a configurar o Logback:
- A configuração fica em
logback.xml, com registradores, anexadores e codificadores. - Os padrões formatam linhas com
%d,%level,%msge%X{}. - O RollingFileAppender alterna os registros; defina níveis por pacote e a aditividade.
- Ative
scanpara a reconfiguração em tempo real.
Você concluiu o curso de registro.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback configuration course complete");
}
}Perguntas Frequentes
A aula “Configurando o Logback” é grátis?
Sim — o texto completo de “Configurando o Logback” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Configurando o Logback”?
Appenders, padrões e níveis. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Configurando o Logback”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que usar logging estruturado
- Fachada SLF4J e loggers
- Logging parametrizado
- Configurando o Logback