Sådan bruger du Spring's DebugInterceptor.


Udgivet:

Opdateret:


Artikler › Sådan bruger du Spring's DebugInterceptor.

Status i 2026 og sikker brug

Konklusion: Springs DebugInterceptor er en proxybaseret AOP-interceptor, der logger oplysninger om metodekald på TRACE-niveau. Den er beregnet til fejlfinding, ikke som en generel strategi for observerbarhed i produktion.

Det lærer du

  • Hvordan en advisor vælger metoder og knytter interceptoren til de relevante Spring beans.
  • Hvorfor self-invocation og objekter, der er oprettet uden for Spring-containeren, kan omgå proxy advice.
  • Sådan undgår du at afsløre argumenter, personlige data, legitimationsoplysninger eller overdreven logvolumen.

Målgruppe: Spring-udviklere, der vedligeholder en XML-konfigureret applikation eller lærer klassisk proxybaseret AOP.

Aktuel status i 2026: Klassen eksisterer stadig i den aktuelle Spring Framework-dokumentation, men Spring 5.1.4 XML-eksemplet nedenfor er historisk. Brug en understøttet Spring-linje, begræns TRACE-logning til kontrolleret diagnostik, og foretræk aktuelle metrikker, sporing og struktureret logning til produktionsoperationer.

Sikkerhedsbemærkning: Kommandoerne og konfigurationseksemplerne i den oprindelige artikel er ikke kørt igen i et aktuelt produktionsmiljø. Kontrollér understøttede versioner, tag backup, og forbered en rollback i et separat testmiljø før ændringerne anvendes.

Officielle kilder

Oversigt

Dette handler om, hvordan du bruger Spring's DebugInterceptor. Det følgende Spring-websted hjalp mig med at forstå konceptet, men det var svært at forstå, hvad man præcist skulle gøre ud fra webstedet alene, så jeg kontrollerede faktisk resultaterne.

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

Indholdsfortegnelse

  1. Hvad er en DebugInterceptor?
  2. montering
  3. Opsummering

1. Hvad er en DebugInterceptor?

DebugInterceptor er et bibliotek, der udsender logs ved hjælp af AOP. Især følgende biblioteker (JAR-filer). Version 5.1.4.

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

Den specifikke Java-fil er "org.springframework.aop.interceptor.DebugInterceptor".

Kort fortalt er AOP en teknik til at injicere behandling i instanser, der administreres i Spring's DI-container. Det officielle navn for AOP er Aspect Oriented Programming.

I dette tilfælde ønsker vi at injicere en DebugInterceptor i den instans, der genereres af @Component.

1-1. gennemførelsesmiljø

Nedenfor beskrives den anvendte Jar og den anvendte version, da der kan være små forskelle afhængigt af miljøet.

Version af spring aopspring-aop-5.1.4.RELEASE.jar
Version af forårsbønnerspring-beans-5.1.4.RELEASE.jar
Version af log output-biblioteketslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Det nødvendige arbejde.

Der kræves følgende arbejde.

  • Opret en instans med @Component.
  • Definer AOP i applicationContext.xml
  • Ændring af indstillingerne for logudgang

2. montering

Nu vil jeg gerne gennemføre det i praksis.

2-1. Opret en instans med @Component.

Forbered en klasse med "@Component", der er erklæret som følger. Udfør kun "return", da du kun ønsker at se AOP'en.

TestAop.java


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

        return;

    }

}

2-2. Definer AOP i applicationContext.xml

Opsæt AOP'en til at injicere processen. De røde områder er de områder, der er relevante for det årlige operationelle program.

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">
~forkortelse~
    <!-- AOP-afprøvning i foråret. -->
    <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' skrives som følger.

pointcut="execution(* pakkens navn.klassens navn.metode-navn(.).)"

I eksemplet ovenfor ville det være som følger.

·pakkens navn:com.example

·klassens navn:TestAop

·metode-navn:testMethod

Hvis du ønsker at anvende den på alle metoder, gælder følgende.

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

2-3. Ændring af indstillingerne for logudgang

Ændr logningsniveauet kun for DebugInterceptor, da niveauet for logoutput, der er beskrevet i DebugInterceptor, er "TRACE". Områder med rødt er de områder, der skal indstilles. Resten af indstillingerne kan angives vilkårligt.

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>

Jeg kiggede på nogle andres blogs, da jeg oprettede den, og nogle af dem sagde, at output skal udgives på logniveau DEBUG, men i tilfælde af "spring-aop-5.1.4.RELEASE.jar" ser det ud til, at output ikke udgives, medmindre det er på logniveau TRACE.

Hvis konfigurationen burde fungere, men logfilerne af en eller anden grund ikke vises, kan du prøve at ændre logniveauet til TRACE.

2-4. Resultat.

Hvis du kalder testMethod i TestAop.java med ovenstående indstillinger udført, bør følgende log vises. Loggen er lang, så jeg har slettet et par linjer, men den skal vise to linjer hver for Entering og Exiting, så der er i alt fire linjer.

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. resumé

Hvis du ikke er bekendt med brugen af DebugInterceptor, henvises du til den.

Det opsummerer de vigtigste trin og begrænsninger.