Spring DebugInterceptor: AOP TRACE-loggning för utveckling


Publicerad:

Uppdaterad:


Tekniska artiklar > Spring DebugInterceptor: AOP TRACE-loggning för utveckling

Status 2026 och säker användning

Slutsats: Springs DebugInterceptor är en proxybaserad AOP-interceptor som loggar detaljer om metodanrop på TRACE-nivå. Den är avsedd för tillfällig felsökning, inte som en allmän strategi för observerbarhet i produktion.

Det här går artikeln igenom

  • Hur en advisor väljer metoder och kopplar interceptorn till berörda Spring-beans.
  • Varför självanrop och objekt som skapats utanför Spring-containern kan passera utanför proxyn.
  • Hur du undviker att avslöja argument, personlig information, autentiseringsuppgifter eller överdriven loggvolym.

Målgrupp: Spring-utvecklare som underhåller ett XML-konfigurerat program eller lär sig klassisk proxybaserad AOP.

Läge 2026: Klassen finns fortfarande i den aktuella dokumentationen för Spring Framework, men XML-exemplet med Spring 5.1.4 nedan är historiskt. Använd en Spring-version med support, begränsa TRACE-loggning till kontrollerad diagnostik och använd moderna mätvärden, distribuerad spårning och strukturerad loggning i produktion.

Säkerhetsinformation: Kommandona och konfigurationsexemplen i originalartikeln har inte testats på nytt i en aktuell produktionsmiljö. Kontrollera versioner med support, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan de används.

Viktiga officiella källor

Översikt

Artikeln visar hur Springs DebugInterceptor används. Den officiella dokumentationen förklarar begreppet; exemplet nedan kompletterar den med en praktisk kontroll av konfigurationen.

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

Innehållsförteckning

  1. Vad är en DebugInterceptor?
  2. Implementering
  3. Sammanfattning

1. Vad är en DebugInterceptor?

DebugInterceptor är en klass i Spring AOP som loggar information om metodanrop. Exemplet använder följande JAR-fil i version 5.1.4.

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

Klassens fullständiga namn är "org.springframework.aop.interceptor.DebugInterceptor".

AOP står för Aspect-Oriented Programming. I Spring används en proxy för att lägga till tvärgående funktioner runt metodanrop på objekt som hanteras av DI-containern.

I det här exemplet kopplas DebugInterceptor till en bean som skapas med @Component.

1-1. Testmiljö

Följande JAR-filer och versioner användes i testet. Andra versioner kan bete sig annorlunda.

Spring AOP-versionspring-aop-5.1.4.RELEASE.jar
Spring Beans-versionspring-beans-5.1.4.RELEASE.jar
Versioner av loggbibliotekenslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Nödvändiga steg

Konfigurationen består av följande steg.

  • Skapa en instans med @Component.
  • Definiera AOP i applicationContext.xml
  • Ändra inställningar för loggutgång

2. Implementering

Följande avsnitt genomför stegen i praktiken.

2-1. Skapa en instans med @Component

Skapa en klass med @Component enligt nedan. Metoden returnerar direkt eftersom testet bara ska visa AOP-anropet.

TestAop.java


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

        return;

    }

}

2-2. Definiera AOP i applicationContext.xml

Lägg till AOP-konfigurationen som kopplar interceptorn till den valda metoden. De rödmarkerade delarna är de delar som hör till AOP-konfigurationen.

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">
~förkortning~
    <!-- Testning av 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>

Pointcut-uttrycket skrivs enligt följande mönster.

Mönstret anger paketnamn, klassnamn och metodnamn i den ordningen.

I exemplet ovan är värdena följande.

• Paketnamn: com.example

• Klassnamn: TestAop

• Metodnamn: testMethod

Följande uttryck tillämpar interceptorn på klassens samtliga metoder.

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

2-3. Ändra inställningar för loggutgång

Sätt loggnivån till TRACE för just DebugInterceptor. De rödmarkerade delarna är obligatoriska för exemplet; övriga logginställningar kan anpassas efter miljön.

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>

Vissa äldre beskrivningar anger nivån DEBUG, men testet med "spring-aop-5.1.4.RELEASE.jar" gav utdata först på TRACE.

Om konfigurationen ser korrekt ut men ingen logg visas, kontrollera därför att nivån verkligen är TRACE.

2-4. Resultat

När TestAop.java anropar testMethod med konfigurationen ovan visas loggen nedan. Exemplet är förkortat; DebugInterceptor skriver två rader för "Entering" och två för "Exiting", totalt fyra rader.

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

DebugInterceptor kan ge detaljerad insyn i proxade metodanrop under kontrollerad felsökning. Kontrollera att pointcut-uttrycket träffar rätt bean och metod, och använd TRACE endast tillfälligt eftersom argument och stora loggmängder kan exponeras.

I produktion bör mer begränsad och strukturerad loggning användas.