Cómo utilizar el DebugInterceptor de Spring.
Fecha de publicación:
Actualizado:
Artículos técnicos > Cómo utilizar el DebugInterceptor de Spring.
Estado y uso seguro en 2026
Conclusión: DebugInterceptor de Spring es un interceptor AOP basado en proxy que registra detalles detallados de invocación de métodos en el nivel TRACE. Está pensado para la depuración, no como una estrategia general de observabilidad de la producción.
Qué aprenderás
- Cómo un asesor selecciona métodos y adjunta el interceptor a Spring beans elegibles.
- Por qué la autoinvocación y los objetos creados fuera del contenedor Spring pueden pasar por alto los consejos de proxy.
- Cómo evitar exponer argumentos, datos personales, credenciales o un volumen de registro excesivo.
Para quién: desarrolladores de Spring que mantienen una aplicación configurada en XML o aprenden AOP clásico basado en proxy.
Situación en 2026: La clase todavía existe en la documentación actual de Spring Framework, pero el ejemplo XML de Spring 5.1.4 a continuación es histórico. Utilice una línea Spring compatible, limite el registro de TRACE a diagnósticos controlados y prefiera las métricas actuales, el seguimiento y el registro estructurado para las operaciones de producción.
Nota de seguridad: Los comandos y ejemplos de configuración del artículo original no se han vuelto a ejecutar en un entorno de producción actual. Verifique las versiones compatibles, las copias de seguridad, los controles de acceso y los pasos de reversión en un entorno de prueba independiente antes de aplicarlos.
Fuentes primarias oficiales
Resumen.
Se trata de cómo utilizar el DebugInterceptor de Spring. La siguiente página web de Spring me ayudó a entender el concepto, pero fue difícil entender qué hacer exactamente sólo con la página web, así que verifiqué los resultados.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Índice de contenidos
1. ¿Qué es un DebugInterceptor?
DebugInterceptor es una librería que emite registros por AOP. En concreto, las siguientes bibliotecas (archivos jar). Versión 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
El archivo Java específico es "org.springframework.aop.interceptor.DebugInterceptor".
Brevemente, AOP es una técnica para inyectar procesamiento en instancias gestionadas en el contenedor DI de Spring. El nombre oficial de AOP es Aspect Oriented Programming.
En este caso, queremos inyectar un DebugInterceptor en la instancia que está siendo generada por @Component.
1-1. entorno de aplicación
A continuación se indican el JAR y la versión utilizados, ya que el comportamiento puede variar según el entorno.
| Versión de aop de primavera | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Versión de las judías de primavera | spring-beans-5.1.4.RELEASE.jar |
| Versión de la biblioteca de salida de registros | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Trabajo requerido.
El trabajo requerido es el siguiente.
- Crear una instancia con @Componente.
- Definir AOP en applicationContext.xml
- Cambiar la configuración de la salida del registro
2. montaje
El siguiente paso implementa la configuración.
2-1. Crear una instancia con @Componente.
Prepara una clase con "@Componente" declarada como sigue. Sólo ejecute 'return' ya que sólo quiere ver el AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definir AOP en applicationContext.xml
Configurar el AOP para inyectar el proceso. Las zonas rojas son las relevantes para el POA.
<?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">
~abreviatura~
<!-- Pruebas de AOP en 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>
'pointcut' se escribe de la siguiente manera.
pointcut="execution(* nombre del paquete.nombre de la clase.nombre del método(..))"
En el ejemplo anterior, sería como sigue.
/ nombre del paquete:com.example
/ nombre de la clase:TestAop
/ nombre del método:testMethod
Si quieres aplicarlo a todos los métodos, se aplica lo siguiente.
/ pointcut="execution(* com.example.TestAop.*(..))"
2-3. Cambiar la configuración de la salida del registro
Cambie el nivel de registro sólo para DebugInterceptor, ya que el nivel de salida de registro descrito en DebugInterceptor es "TRACE". Las áreas en rojo son las que hay que fijar. El resto de los ajustes se pueden introducir de forma arbitraria.
<?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>
He mirado en los blogs de otras personas al crearlo, y algunos indicaban que la salida debía ser a nivel de log DEBUG, pero en el caso de 'spring-aop-5.1.4.RELEASE.jar' parece que la salida no se produce a menos que sea a nivel de log TRACE.
Si la configuración debería estar funcionando, pero por alguna razón los registros no están siendo emitidos, intente cambiar el nivel de registro a TRACE.
2-4. Resultado.
Si llama a testMethod en TestAop.java con la configuración anterior completada, debería salir el siguiente registro. El registro es largo, así que he borrado algunas líneas, pero debería salir dos líneas cada una para Entrar y Salir, para un total de cuatro líneas.
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. resumen
Si no está familiarizado con el uso del DebugInterceptor, remítase a él.