Utiliser DebugInterceptor avec Spring


Date de publication:

Mise à jour :


Articles > Comment utiliser le DebugInterceptor de Spring.

Statut 2026 et utilisation sûre

En bref : DebugInterceptor est un intercepteur AOP fondé sur les proxies Spring. Il journalise les appels de méthodes au niveau TRACE et doit rester un outil de diagnostic ponctuel, pas une solution générale d'observabilité en production.

Ce que vous apprendrez

  • Comment un advisor sélectionne les méthodes et associe l'intercepteur aux beans Spring concernés.
  • Pourquoi les auto-appels et les objets créés hors du conteneur Spring peuvent échapper au proxy.
  • Comment éviter d'exposer des arguments, des données personnelles, des identifiants ou un volume de journaux excessif.

À qui s'adresse : Les développeurs Spring qui gèrent une application configurée en XML ou qui apprennent l'AOP classique basé sur un proxy.

Note de mise à jour (2026) : La classe existe toujours dans la documentation actuelle de Spring Framework, mais l'exemple XML Spring 5.1.4 ci-dessous est historique. Utilisez une ligne Spring prise en charge, limitez la journalisation TRACE aux diagnostics contrôlés et préférez les métriques actuelles, le traçage et la journalisation structurée pour les opérations de production.

Note de sécurité : les commandes et exemples de configuration de l'article d'origine n'ont pas été rejoués dans un environnement de production actuel. Avant toute application, vérifiez les versions prises en charge, les sauvegardes, les contrôles d'accès et la procédure de retour arrière dans un environnement de test isolé.

Sources primaires officielles

Vue d’ensemble

Cet article montre comment configurer DebugInterceptor de Spring pour tracer, par AOP, l'entrée et la sortie de méthodes ciblées. L'exemple complète la documentation de référence par une configuration reproductible avec Spring 5.1.4.

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api

Table des matières

  1. Qu'est-ce qu'un DebugInterceptor ?
  2. Configuration
  3. Conclusion

1. Qu'est-ce qu'un DebugInterceptor ?

DebugInterceptor est un intercepteur Spring AOP qui journalise l'entrée et la sortie d'un appel de méthode. Cet exemple utilise les bibliothèques Spring 5.1.4 indiquées ci-dessous.

https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE

La classe concernée est "org.springframework.aop.interceptor.DebugInterceptor".

La programmation orientée aspect (AOP) applique un traitement transversal aux objets gérés par le conteneur d'injection de dépendances de Spring, sans le mêler au code métier.

Ici, DebugInterceptor est associé au composant créé avec @Component.

1-1. Environnement de l'exemple

Les JAR et leurs versions sont précisés, car le comportement et le niveau de journalisation peuvent varier selon la version.

Version de Spring AOPspring-aop-5.1.4.RELEASE.jar
Version de Spring Beansspring-beans-5.1.4.RELEASE.jar
Bibliothèques de journalisationslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Étapes nécessaires

La configuration comporte trois étapes.

  • Créez une instance avec @Component.
  • Définir AOP dans applicationContext.xml
  • Modification des paramètres de sortie du journal

2. Configuration

Les sections suivantes appliquent ces étapes à une classe de démonstration.

2-1. Créez une instance avec @Component.

La classe suivante est déclarée avec @Component. Sa méthode ne fait rien d'autre que retourner, afin d'isoler la trace produite par l'intercepteur.

TestAop.java


@Component
public class TestAop{
    public void testMethod() {

        return;

    }

}

2-2. Définir AOP dans applicationContext.xml

Déclarez l'intercepteur et le pointcut dans applicationContext.xml. Les lignes rouges correspondent à la configuration AOP.

applicationContext.xml


<?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">
~abrégé~
    <!-- Tests de Spring AOP. -->
    <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>

L'expression de pointcut suit cette forme :

pointcut="execution(* nom du paquet.nom de la classe.nom de la méthode(..))"

Dans l'exemple ci-dessus, les éléments sont :

• nom du paquet: com.example

• nom de la classe: TestAop

• nom de la méthode: testMethod

Pour viser toutes les méthodes de la classe, utilisez l'expression plus large suivante :

• pointcut="execution(* com.example.TestAop.*(..))"

2-3. Modification des paramètres de sortie du journal

DebugInterceptor écrit les messages de cet exemple au niveau TRACE. La configuration rouge active donc TRACE uniquement pour son package ; adaptez le reste de logback.xml aux règles de journalisation de l'application.

logback.xml


<?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>

Avec spring-aop-5.1.4.RELEASE.jar, le niveau DEBUG ne suffit pas pour ces messages : le logger de l'intercepteur doit accepter TRACE.

Si aucune trace n'apparaît, vérifiez le pointcut, le passage de l'appel par le proxy Spring et le niveau effectif du logger.

2-4. Résultat.

Lorsque testMethod est appelée par l'intermédiaire du proxy Spring, la configuration produit les lignes de trace ci-dessous. L'extrait conserve les messages Entering et Exiting qui encadrent l'appel.

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. Conclusion

Réservez DebugInterceptor à des diagnostics contrôlés, limitez le pointcut et vérifiez qu'aucun argument ni résultat sensible n'est écrit dans les journaux.

■INFORMATION

Articles


■PROFILE

Profil


■Contact

Contact