Spring DebugInterceptor: AOP izsekošanas žurnāls izstrādei
Publikācijas datums:
Atjaunināts:
Tehniskie raksti > Spring DebugInterceptor: AOP izsekošanas žurnāls izstrādei
2026. gada statuss un droša lietošana
Secinājums: Spring DebugInterceptor ir uz starpniekobjektu balstīts AOP pārtvērējs, kas TRACE līmenī reģistrē detalizētu informāciju par metožu izsaukumiem. Tas paredzēts atkļūdošanai, nevis vispārējai produkcijas vides novērošanai.
Ko jūs uzzināsiet
- Kā Spring advisor atlasa metodes un pievieno pārtvērēju piemērotiem Spring pārvaldītiem bean objektiem.
- Kāpēc metodes izsaukums tajā pašā objektā un ārpus Spring konteinera izveidoti objekti var apiet starpniekobjekta advice.
- Kā nepieļaut argumentu, personas datu un piekļuves datu nonākšanu žurnālā un ierobežot žurnāla apjomu.
Kam tas paredzēts: Spring izstrādātājiem, kuri uztur ar XML konfigurētu lietojumprogrammu vai apgūst klasisko, uz starpniekobjektiem balstīto AOP.
2026. gada konteksts: klase joprojām ir pieejama aktuālajā Spring Framework dokumentācijā, taču tālāk redzamais Spring 5.1.4 XML piemērs ir vēsturisks. Izmantojiet atbalstītu Spring versiju, ieslēdziet TRACE tikai kontrolētai diagnostikai un produkcijas vidē dodiet priekšroku mūsdienīgai metrikai, trasēšanai un strukturētiem žurnāliem.
Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.
Galvenie oficiālie avoti
Pārskats
Šajā rakstā parādīts, kā izmantot Spring DebugInterceptor. Koncepcija sākotnējā rakstā bija saistīta ar adresi https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api, bet tālāk sniegts konkrēts vēsturiskas XML konfigurācijas piemērs.
Satura rādītājs
1. Kas ir DebugInterceptor?
DebugInterceptor ir Spring AOP pārtvērējs, kas žurnālā ieraksta metodes izsaukuma informāciju. Šajā vēsturiskajā piemērā izmantots Spring 5.1.4 JAR fails:
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Izmantotā Java klase ir org.springframework.aop.interceptor.DebugInterceptor.
AOP jeb aspektorientētā programmēšana ļauj atdalītu darbību piemērot Spring DI konteinera pārvaldītu objektu metodēm. Spring to parasti īsteno ar starpniekobjektu.
Šajā piemērā DebugInterceptor tiek pievienots ar @Component reģistrētam bean objektam.
1-1. Izmantotā vide
Izmantotie JAR faili un to versijas norādītas tālāk, jo dažādās vidēs darbība var atšķirties.
| Spring AOP versija | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Spring Beans versija | spring-beans-5.1.4.RELEASE.jar |
| Žurnāla bibliotēku versijas | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Nepieciešamās darbības
Jāveic šādas darbības:
- jāreģistrē bean ar @Component;
- jādefinē AOP failā applicationContext.xml;
- jāmaina žurnāla izvades iestatījumi.
2. Konfigurēšana (vēsturisks Spring 5.1.4 piemērs)
Tālāk parādītas konfigurēšanas darbības.
2-1. Bean izveide ar @Component
Sagatavojiet klasi ar @Component anotāciju, kā parādīts tālāk. Metode neko nedara, lai piemērs demonstrētu tikai AOP darbību.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. AOP definēšana failā applicationContext.xml
Konfigurējiet AOP pārtvērēja pievienošanai. Ar sarkanu atzīmētas ar AOP saistītās daļas.
<?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">
~saīsinājums~
<!-- Pavasara AOP testēšana. -->
<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 izteiksmes vispārīgā forma ir šāda:
pointcut="execution(* paketes nosaukums.klases nosaukums.metodes nosaukums(..))"
Šajā piemērā vērtības ir:
•paketes nosaukums: com.example
•klases nosaukums: TestAop
•metodes nosaukums: testMethod
Lai to piemērotu visām mērķa klases metodēm, izmantojiet plašāku pointcut:
•pointcut="execution(* com.example.TestAop.*(..))"
2-3. Žurnāla izvades iestatījumu mainīšana
DebugInterceptor raksta ziņojumus TRACE līmenī, tāpēc šo līmeni ieslēdziet tikai attiecīgajam pārtvērējam. Ar sarkanu atzīmēti nepieciešamie iestatījumi; pārējās vērtības pielāgojiet savai videi.
<?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>
Vēsturiskajā spring-aop-5.1.4.RELEASE.jar piemērā DebugInterceptor ziņojumi parādījās TRACE, nevis DEBUG līmenī.
Ja konfigurācija ir pareiza, bet ziņojumi neparādās, pārbaudiet, vai DebugInterceptor logger ir iestatīts uz TRACE. Produkcijas vidē šo detalizēto līmeni neatstājiet ieslēgtu ilgstoši.
2-4. Rezultāts
Izsaucot TestAop.java metodi testMethod ar iepriekšējo konfigurāciju, tiek izvadīts tālāk redzamais žurnāls. Dažas rindas ir izlaistas; piemērā redzamas divas ieejas un divas izejas rindas.
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. Kopsavilkums
Izmantojiet DebugInterceptor tikai kontrolētai diagnostikai, sašauriniet pointcut un pārliecinieties, ka žurnālā netiek ierakstīti sensitīvi argumenti vai atgrieztās vērtības.