DebugInterceptor gebruiken in Spring


Datum van publicatie:

Bijgewerkt:


Artikelen > Hoe gebruik je Spring's DebugInterceptor.

Actualisatie voor 2026 en veilig gebruik

Kort gezegd: DebugInterceptor is een AOP-interceptor die via Spring-proxy's methodeaanroepen op TRACE-niveau logt. Gebruik hem voor gerichte diagnose, niet als algemene observability-oplossing in productie.

Wat je zult leren

  • Hoe een advisor methoden selecteert en de interceptor aan de juiste Spring-beans koppelt.
  • Waarom zelfaanroepen en objecten buiten de Spring-container de proxy kunnen omzeilen.
  • Hoe je voorkomt dat argumenten, persoonsgegevens, referenties of te veel logdata worden vastgelegd.

Voor wie: Spring-ontwikkelaars die een XML-geconfigureerde applicatie onderhouden of klassieke proxygebaseerde AOP leren.

Actualisatie voor 2026: de klasse staat nog in de huidige Spring Framework-documentatie, maar het XML-voorbeeld met Spring 5.1.4 is historisch. Gebruik een ondersteunde release, beperk TRACE tot gecontroleerde diagnose en kies in productie voor metrics, tracing en gestructureerde logging.

Veiligheidsopmerking: de opdrachten en configuratievoorbeelden uit het oorspronkelijke artikel zijn niet opnieuw in een moderne productieomgeving uitgevoerd. Controleer ondersteunde versies, back-ups, toegangsbeheer en terugrolstappen eerst in een afzonderlijke testomgeving.

Officiële primaire bronnen

Overzicht

Dit artikel laat zien hoe je Spring DebugInterceptor configureert om via AOP het begin en einde van geselecteerde methoden te loggen. Het voorbeeld vult de documentatie aan met een reproduceerbare configuratie voor Spring 5.1.4.

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

Inhoudsopgave

  1. Wat is een DebugInterceptor?
  2. Configuratie
  3. Conclusie

1. Wat is een DebugInterceptor?

DebugInterceptor is een Spring AOP-interceptor die het begin en einde van een methodeaanroep logt. Het voorbeeld gebruikt de onderstaande Spring 5.1.4-bibliotheken.

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

De betreffende klasse is "org.springframework.aop.interceptor.DebugInterceptor".

Aspectgeoriënteerd programmeren (AOP) past gedeeld gedrag toe op objecten die door Spring's DI-container worden beheerd, zonder dat gedrag met de applicatielogica te vermengen.

Hier wordt DebugInterceptor gekoppeld aan het component dat met @Component is gemaakt.

1-1. implementatieomgeving

Ik zou graag de gebruikte Jar en versie beschrijven, aangezien er kleine verschillen kunnen zijn afhankelijk van de omgeving.

Versie van Spring AOPspring-aop-5.1.4.RELEASE.jar
Versie van Spring Beansspring-beans-5.1.4.RELEASE.jar
Loggingbibliothekenslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Werk vereist.

Het vereiste werk is als volgt.

  • Maak een instantie met @Component.
  • Definieer AOP in applicationContext.xml
  • Veranderen van log output instellingen

2. Configuratie

De volgende onderdelen passen de stappen toe op een eenvoudige demonstratieklasse.

2-1. Maak een instantie met @Component.

Maak een klasse met "@Component" als volgt gedeclareerd. Voer alleen "return" uit, want je wilt alleen de AOP zien.

TestAop.java


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

        return;

    }

}

2-2. Definieer AOP in applicationContext.xml

Declareer de interceptor en pointcut in applicationContext.xml. De rode regels vormen de AOP-configuratie.

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">
~verkorting~
    <!-- Spring AOP testen. -->
    <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" wordt als volgt geschreven.

pointcut="execution(* pakketnaam.klassenaam.methode-naam(..))"

In het bovenstaande voorbeeld zou het als volgt zijn.

• pakketnaam: com.example

• klassenaam: TestAop

• methode-naam: testMethod

Als u het op alle methoden wilt toepassen, geldt het volgende.

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

2-3. Veranderen van log output instellingen

Wijzig het logging-niveau alleen voor DebugInterceptor, aangezien het niveau van de log-uitvoer beschreven in DebugInterceptor "TRACE" is. De gebieden in het rood zijn die welke moeten worden ingesteld. De rest van de instellingen kan willekeurig worden ingevoerd.

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>

Met spring-aop-5.1.4.RELEASE.jar vallen deze berichten buiten DEBUG: de logger van de interceptor moet TRACE toestaan.

Verschijnt er niets, controleer dan de pointcut, of de aanroep via de Spring-proxy loopt en welk logniveau effectief geldt.

2-4. Resultaat.

Als u testMethod in TestAop.java aanroept met de bovenstaande instellingen voltooid, zou het volgende log moeten worden uitgevoerd. Het log is lang, dus heb ik een paar regels verwijderd, maar het zou twee regels elk voor Entering en Exiting moeten uitvoeren, voor een totaal van vier regels.

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

Gebruik DebugInterceptor alleen voor gecontroleerde diagnose, beperk de pointcut en controleer dat gevoelige argumenten of retourwaarden niet in logs terechtkomen.

■INFORMATION

Artikelen


■PROFILE

Profiel


■Contact

Contact