Spring DebugInterceptor: AOP TRACE žurnalai kūrimo aplinkoje
Paskelbimo data:
Atnaujinta:
Techniniai straipsniai > Spring DebugInterceptor: AOP TRACE žurnalai kūrimo aplinkoje
2026 m. būsena ir saugus naudojimas
Trumpai: „Spring“ DebugInterceptor yra tarpiniu objektu (proxy) pagrįstas AOP perėmėjas, TRACE lygiu registruojantis išsamią metodų iškvietimo informaciją. Jis skirtas diagnostikai, o ne bendrai produkcinės sistemos stebėsenai.
Ką išmoksite
- Kaip Advisor parenka metodus ir prijungia perėmėją prie tinkamų „Spring“ valdomų objektų.
- Kodėl objekto vidiniai metodų iškvietimai ir už „Spring“ konteinerio ribų sukurti objektai gali apeiti tarpinio objekto advice.
- Kaip neatskleisti argumentų, asmens duomenų ar prisijungimo duomenų ir nesukurti pernelyg daug žurnalų.
Kam skirtas straipsnis: „Spring“ kūrėjams, prižiūrintiems XML konfigūracija pagrįstą programą arba besimokantiems klasikinio tarpinių objektų AOP.
2026 m. kontekstas: ši klasė tebėra dabartinėje „Spring Framework“ dokumentacijoje, tačiau toliau pateiktas „Spring 5.1.4“ XML pavyzdys yra istorinis. Naudokite palaikomą „Spring“ leidimų liniją, TRACE žurnalus įjunkite tik kontroliuojamai diagnostikai, o produkcinėje aplinkoje rinkitės dabartines metrikų, trasavimo ir struktūrinių žurnalų priemones.
Saugos pastaba: pradinio straipsnio komandos ir konfigūracijos pavyzdžiai nebuvo iš naujo išbandyti dabartinėje produkcinėje aplinkoje. Prieš juos taikydami atskiroje bandymo aplinkoje patikrinkite palaikomas versijas, atsargines kopijas, prieigos kontrolę ir grįžimo prie ankstesnės būsenos veiksmus.
Pagrindiniai oficialūs šaltiniai
Apžvalga
DebugInterceptor padeda pamatyti, kada per „Spring“ AOP tarpinį objektą įeinama į metodą ir kada iš jo grįžtama. Toliau pateiktas istorinis XML konfigūracijos pavyzdys papildo oficialią „Spring“ AOP dokumentaciją praktine vykdymo eiga.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Turinys
1. Kas yra DebugInterceptor?
DebugInterceptor yra „Spring AOP“ perėmėjas, registruojantis metodų iškvietimo pradžią ir pabaigą. Šiame istoriniame pavyzdyje naudojami 5.1.4 leidimo JAR failai.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Klasės pilnas pavadinimas yra org.springframework.aop.interceptor.DebugInterceptor.
AOP (aspektinis programavimas) leidžia bendrą elgesį prijungti prie „Spring“ DI konteinerio valdomų objektų metodų jų nekeičiant.
Šiame pavyzdyje DebugInterceptor prijungiamas prie @Component pažymėto objekto per „Spring“ sukurtą tarpinį objektą.
1-1. Naudota aplinka
Naudoti JAR failai ir jų versijos išvardyti todėl, kad elgesys bei žurnalų lygiai gali skirtis tarp leidimų.
| spring-aop versija | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| spring-beans versija | spring-beans-5.1.4.RELEASE.jar |
| Žurnalų bibliotekų versijos | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Reikalingi veiksmai
Reikia atlikti tris veiksmus:
- sukurti komponentą su @Component;
- apibrėžti AOP applicationContext.xml faile;
- nustatyti žurnalų išvesties lygį.
2. Konfigūracija (istorinis „Spring 5.1.4“ pavyzdys)
Toliau parodyta visa konfigūracijos eiga.
2-1. Komponento sukūrimas su @Component
Parenkite @Component pažymėtą klasę. Metodas nieko neatlieka, kad pavyzdyje būtų matomas tik AOP perėmėjo elgesys.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. AOP apibrėžimas applicationContext.xml faile
Apibrėžkite perėmėją ir jo pointcut. Raudonai pažymėtos su AOP susijusios konfigūracijos dalys.
<?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">
~sutrumpinimas~
<!-- Pavasario AOP testavimas. -->
<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 išraiška nurodo paketą, klasę ir metodą, kuriems taikomas perėmėjas.
pointcut="execution(* paketo.pavadinimas.KlasėsPavadinimas.metodoPavadinimas(..))"
Šiame pavyzdyje:
• paketas: com.example
• klasė: TestAop
• metodas: testMethod
Norėdami atitikti visus tikslinės klasės metodus, naudokite platesnę išraišką:
•pointcut="execution(* com.example.TestAop.*(..))"
2-3. Žurnalų lygio nustatymas
DebugInterceptor įrašus šiame leidime išveda TRACE lygiu, todėl būtent jo kategorijai nustatykite TRACE. Raudonai pažymėta būtina dalis; kitos nuostatos priklauso nuo programos.
<?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>
Kai kuriuose senuose aprašymuose minimas DEBUG lygis, tačiau su čia naudotu spring-aop-5.1.4.RELEASE.jar bandymu įrašai pasirodė tik nustačius TRACE.
Jei žurnalų nėra, patikrinkite ne tik lygį, bet ir ar objektą sukūrė „Spring“, ar metodas iškviečiamas per tarpinį objektą ir ar pointcut išraiška iš tiesų atitinka metodą.
2-4. Rezultatas
Iškvietus TestAop.java metodą testMethod per sukonfigūruotą tarpinį objektą gaunami toliau parodyti įrašai. Pavyzdys sutrumpintas; jame matomos metodo pradžios ir pabaigos eilutės.
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. Išvada
DebugInterceptor naudokite tik kontroliuojamai diagnostikai, kiek įmanoma susiaurinkite pointcut ir patikrinkite, kad į žurnalus nepatektų slapti argumentai, asmens duomenys ar grąžinamos reikšmės. Produkcinėje aplinkoje TRACE palikite išjungtą, kai diagnostika baigta.
Techniniai straipsniai
Peržiūrėkite visus techninius straipsnius.
Profilis
Peržiūrėkite autoriaus profilį.
Kontaktai