Spring DebugInterceptor: AOP TRACE-loggning för utveckling
Datum för offentliggörande:
Uppdaterad:
Tekniska artiklar > Spring DebugInterceptor: AOP TRACE-loggning för utveckling
2026 status och säker användning
Slutsats: Springs DebugInterceptor är en proxybaserad AOP-interceptor som loggar detaljerad information om metodanrop på TRACE-nivå. Den är avsedd för felsökning, inte som en generell produktionsobservationsstrategi.
Vad du kommer att lära dig
- Hur en rådgivare väljer metoder och fäster interceptorn på kvalificerade springbönor.
- Varför självanrop och objekt som skapats utanför Spring-behållaren kan kringgå proxyråd.
- Hur du undviker att avslöja argument, personlig information, autentiseringsuppgifter eller överdriven loggvolym.
Vem är det här för: Vårutvecklare som underhåller en XML-konfigurerad applikation eller lär sig klassisk proxybaserad AOP.
2026-kontext: Klassen finns fortfarande i den aktuella Spring Framework-dokumentationen, men Spring 5.1.4 XML-exemplet nedan är historiskt. Använd en Spring-version som stöds, begränsa TRACE-loggning till kontrollerad diagnostik och föredra aktuella mätvärden, spårning och strukturerad loggning för produktionsverksamhet.
Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.
Viktiga officiella källor
Översikt.
Det här handlar om hur man använder Spring's DebugInterceptor. Följande webbplats för våren hjälpte mig att förstå konceptet, men det var svårt att förstå exakt vad jag skulle göra enbart från webbplatsen, så jag kontrollerade faktiskt resultaten.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Innehållsförteckning
1. Vad är en DebugInterceptor?
DebugInterceptor är ett bibliotek som matar ut loggar med hjälp av AOP. Särskilt följande bibliotek (JAR-filer). Version 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Den specifika Java-filen är "org.springframework.aop.interceptor.DebugInterceptor".
I korthet är AOP en teknik för att injicera bearbetning i instanser som hanteras i Spring DI-behållaren. Det officiella namnet på AOP är Aspect Oriented Programming.
I det här fallet vill vi injicera en DebugInterceptor i den instans som genereras av @Component.
1-1. miljö för genomförande.
Jag vill beskriva JAR och den version som används, eftersom det kan finnas små skillnader beroende på miljön.
| Version av spring aop | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Version av vårbönor | spring-beans-5.1.4.RELEASE.jar |
| Version av biblioteket för loggutdata | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Arbete krävs.
Det arbete som krävs är följande.
- Skapa en instans med @Component.
- Definiera AOP i applicationContext.xml
- Ändra inställningar för loggutgång
2. montering
Nu vill jag genomföra den i praktiken.
2-1. Skapa en instans med @Component.
Förbered en klass med "@Component" som deklareras på följande sätt. Kör bara "return" eftersom du bara vill se AOP:n.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definiera AOP i applicationContext.xml
Skapa AOP för att injicera processen. De röda områdena är de områden som är relevanta för den årliga operativa planeringen.
<?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" skrivs på följande sätt.
Pointcut-mönstret anger paketnamn, klassnamn och metodnamn i den ordningen.
I exemplet ovan skulle det se ut på följande sätt.
•paketets namn: com.example
•klassens namn: TestAop
•Metodnamn: testMethod
Om du vill tillämpa den på alla metoder gäller följande.
•pointcut="execution(* com.example.TestAop.*(..))"
2-3. Ändra inställningar för loggutgång
Ändra loggningsnivån endast för DebugInterceptor, eftersom den loggningsnivå som beskrivs i DebugInterceptor är "TRACE". Områden i rött är de som måste ställas in. Resten av inställningarna kan anges godtyckligt.
<?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>
Jag tittade på andras bloggar när jag skapade den, och i några av dem stod det att utdata bör ges ut på loggnivå DEBUG, men i fallet "spring-aop-5.1.4.RELEASE.jar" verkar det som om utdata inte ges ut om det inte är på loggnivå TRACE.
Om konfigurationen borde fungera, men loggarna av någon anledning inte visas, kan du försöka ändra loggnivån till TRACE.
2-4. Resultat.
Om du anropar testMethod i TestAop.java med ovanstående inställningar gjorda bör följande logg visas. Loggen är lång, så jag raderade några rader, men den bör ge ut två rader vardera för Ingång och Avslutning, för 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
Om du inte är bekant med användningen av DebugInterceptor kan du läsa den.
Tack för att du tittade på till slutet.