Como usar o Spring DebugInterceptor para rastreamento AOP
Data de Publicação:
Atualizado:
Artigos > Como usar o Spring DebugInterceptor para rastreamento AOP
Atualização de 2026 e utilização segura
Em resumo: o DebugInterceptor é um interceptor AOP baseado nos proxies do Spring. Regista chamadas de métodos no nível TRACE e deve ser usado em diagnósticos pontuais, não como solução geral de observabilidade em produção.
O que você aprenderá
- Como um orientador seleciona métodos e anexa o interceptor aos beans Spring elegíveis.
- Por que a auto-invocação e os objetos criados fora do contêiner Spring podem ignorar os conselhos de proxy.
- Como evitar a exposição de argumentos, dados pessoais, credenciais ou volume excessivo de registros.
A quem se destina: Desenvolvedores Spring que mantêm um aplicativo configurado em XML ou que aprendem AOP clássico baseado em proxy.
Atualização para 2026: A classe ainda existe na documentação atual do Spring Framework, mas o exemplo XML do Spring 5.1.4 abaixo é histórico. Use uma linha Spring compatível, limite o registro TRACE a diagnósticos controlados e prefira métricas atuais, rastreamento e registro estruturado para operações de produção.
Nota de segurança: os comandos e exemplos de configuração do artigo original não foram novamente executados num ambiente de produção atual. Antes de os aplicar, confirme as versões suportadas, as cópias de segurança, os controlos de acesso e o procedimento de reversão num ambiente de teste isolado.
Fontes primárias oficiais
Visão geral
Este artigo mostra como configurar o DebugInterceptor do Spring para registar, através de AOP, a entrada e a saída dos métodos selecionados. O exemplo complementa a documentação com uma configuração reproduzível em Spring 5.1.4.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Índice
1. O que é um DebugInterceptor?
O DebugInterceptor é uma biblioteca que gera registos através de AOP. Este exemplo utiliza os seguintes ficheiros JAR, na versão 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
A classe em causa é "org.springframework.aop.interceptor.DebugInterceptor".
A programação orientada a aspetos (AOP) aplica comportamento transversal aos objetos geridos pelo contentor de injeção de dependências do Spring, sem o misturar com a lógica da aplicação.
Neste caso, o DebugInterceptor é associado ao componente criado com @Component.
1-1. ambiente de implementação
Esta secção identifica os ficheiros JAR e as versões utilizadas, pois os detalhes podem variar consoante o ambiente.
| Versão do Spring AOP | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Versão do Spring Beans | spring-beans-5.1.4.RELEASE.jar |
| Bibliotecas de logging | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Trabalho necessário.
O trabalho necessário é o seguinte.
- Criar uma instância com @Component.
- Definir AOP na aplicaçãoContext.xml
- Alteração das definições de saída de registo
2. Configuração
As secções seguintes aplicam os passos a uma classe de demonstração.
2-1. Criar uma instância com @Component.
A classe seguinte é declarada com @Component. O método limita-se a devolver o controlo, para isolar o registo produzido pelo interceptor.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definir AOP na aplicaçãoContext.xml
Declare o interceptor e o pointcut em applicationContext.xml. As linhas a vermelho pertencem à configuração AOP.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
~abridgement~
<!-- Teste AOP da Primavera. -->
<bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor" />
<aop:config>
<aop:advisor advice-ref="debugInterceptor"
pointcut="execution(* com.example.TestAop.testMethod(..))" />
</aop:config>
</beans>
A expressão pointcut segue esta forma:
pointcut="execution(* nome do pacote.nome da classe.método-nome(..))"
No exemplo acima, seria o seguinte.
• nome do pacote: com.example
• nome da classe: TestAop
• método-nome: testMethod
Se desejar aplicá-lo a todos os métodos, aplica-se o seguinte.
• pointcut="execution(* com.example.TestAop.*(..))"
2-3. Alteração das definições de saída de registo
Alterar o nível de registo apenas para o DebugInterceptor, uma vez que o nível de saída de registo descrito no DebugInterceptor é "TRACE". As áreas a vermelho são aquelas que precisam de ser definidas. O resto das configurações pode ser introduzido arbitrariamente.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
</encoder>
</appender>
<appender name="APPLICATION_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${app.log.dir:-log}/todo-application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${app.log.dir:-log}/todo-application-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
</encoder>
</appender>
<logger name="org.springframework.aop.interceptor" level="trace">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLICATION_LOG_FILE" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLICATION_LOG_FILE" />
</root>
</configuration>
Com spring-aop-5.1.4.RELEASE.jar, o nível DEBUG não inclui estas mensagens: o logger do interceptor tem de aceitar TRACE.
Se o registo não aparecer, verifique o pointcut, a passagem da chamada pelo proxy do Spring e o nível efetivo do logger.
2-4. Resultado.
Se chamar testMethod em TestAop.java com as configurações acima completas, deve ser emitido o seguinte registo. O registo é longo, pelo que apaguei algumas linhas, mas deve produzir duas linhas cada uma para Entrada e Saída, para um total de quatro linhas.
date:2021-01-18 15:26:35 thread:http-nio-8081-exec-3 X-Track:84b8ab0aa6504352a815ce85167a1981 level:TRACE logger:o.s.aop.interceptor.DebugInterceptor message:Entering ReflectiveMethodInvocation
date:2021-01-18 15:26:35 thread:http-nio-8081-exec-3 X-Track:84b8ab0aa6504352a815ce85167a1981 level:TRACE logger:o.s.aop.interceptor.DebugInterceptor message:Entering ReflectiveMethodInvocation
date:2021-01-18 15:26:40 thread:http-nio-8081-exec-3 X-Track:84b8ab0aa6504352a815ce85167a1981 level:TRACE logger:o.s.aop.interceptor.DebugInterceptor message:Exiting ReflectiveMethodInvocation
date:2021-01-18 15:26:40 thread:http-nio-8081-exec-3 X-Track:84b8ab0aa6504352a815ce85167a1981 level:TRACE logger:o.s.aop.interceptor.DebugInterceptor message:Exiting ReflectiveMethodInvocation
3. Conclusão
Utilize o DebugInterceptor apenas em diagnósticos controlados, limite o pointcut e confirme que argumentos ou valores de retorno sensíveis não são escritos nos logs.