Spring DebugInterceptor: AOP TRACE logovanie pri vývoji
Dátum vydania:
Aktualizované:
Technické články > Spring DebugInterceptor: AOP TRACE logovanie pri vývoji
stav v roku 2026 a bezpečné používanie
Záver: Spring's DebugInterceptor je zachytávač AOP založený na proxy, ktorý zaznamenáva podrobné podrobnosti o vyvolaní metódy na úrovni TRACE. Je určený na ladenie, nie ako všeobecná stratégia pozorovateľnosti produkcie.
Čo sa naučíte
- Ako poradca vyberá metódy a pripája zachytávač k vhodným jarným fazuľkám.
- Prečo samovyvolanie a objekty vytvorené mimo kontajnera Spring môžu obísť rady proxy.
- Ako sa vyhnúť prezradeniu argumentov, osobných údajov, poverení alebo nadmerného objemu denníkov.
Pre koho je to určené: Jarní vývojári, ktorí udržiavajú aplikáciu konfigurovanú XML alebo sa učia klasické AOP založené na proxy.
Kontext v roku 2026: Trieda stále existuje v aktuálnej dokumentácii Spring Framework, ale príklad XML Spring 5.1.4 nižšie je historický. Použite podporovanú líniu Spring, obmedzte zaznamenávanie TRACE na riadenú diagnostiku a uprednostňujte aktuálne metriky, sledovanie a štruktúrované protokolovanie pre výrobné operácie.
Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, riadenie prístupu a kroky vrátenia v samostatnom testovacom prostredí.
Hlavné oficiálne zdroje
Prehľad.
Toto je o tom, ako používať nástroj DebugInterceptor od spoločnosti Spring. Nasledujúca webová stránka Spring mi pomohla pochopiť tento koncept, ale bolo ťažké pochopiť, čo presne robiť len z webovej stránky, takže som si výsledky skutočne overil.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Obsah
1. Čo je DebugInterceptor?
DebugInterceptor je knižnica, ktorá vypisuje protokoly pomocou AOP. Konkrétne ide o tieto knižnice (súbory JAR). Verzia 5.1.4.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Konkrétny súbor Java je "org.springframework.aop.interceptor.DebugInterceptor".
Stručne povedané, AOP je technika na injektovanie spracovania do inštancií spravovaných v kontajneri Spring DI. Oficiálny názov pre AOP je aspektovo orientované programovanie.
V tomto prípade chceme do inštancie, ktorá sa generuje pomocou @Component, injektovať DebugInterceptor.
1-1. prostredie implementácie
Chcel by som opísať použitý JAR a verziu, pretože v závislosti od prostredia môžu existovať malé rozdiely.
| Verzia jarného aop | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Verzia jarnej fazule | spring-beans-5.1.4.RELEASE.jar |
| Verzia knižnice výstupu denníka | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Požadované práce.
Požadované práce sú nasledovné.
- Vytvorenie inštancie pomocou @Component.
- Definícia AOP v súbore applicationContext.xml
- Zmena nastavení výstupu denníka
2. montáž
Teraz by som ho chcel uplatniť v praxi.
2-1. Vytvorenie inštancie pomocou @Component.
Pripravte si triedu s "@Component" deklarovanú takto. Vykonajte len príkaz 'return', pretože chcete vidieť len AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Definícia AOP v súbore applicationContext.xml
Nastavte AOP na vstrekovanie procesu. Červenou farbou sú označené oblasti, ktoré sa týkajú AOP.
<?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">
~skrátenie~
<!-- Jarné testovanie 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' sa píše takto.
pointcut="execution(* názov balíka.názov triedy.názov metódy(..))"
V uvedenom príklade by to bolo takto.
•názov balíka: com.example
•názov triedy: TestAop
•názov metódy: testMethod
Ak ju chcete použiť na všetky metódy, platí nasledujúce.
•pointcut="execution(* com.example.TestAop.*(..))"
2-3. Zmena nastavení výstupu denníka
Zmeňte úroveň protokolovania len pre DebugInterceptor, pretože úroveň výstupu protokolu opísaná v DebugInterceptor je "TRACE". Červenou farbou sú označené oblasti, ktoré je potrebné nastaviť. Ostatné nastavenia môžete zadať ľubovoľne.
<?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>
Pri vytváraní som sa pozrel na blogy niektorých iných ľudí a niektorí uviedli, že výstup by mal byť na úrovni protokolu DEBUG, ale v prípade 'spring-aop-5.1.4.RELEASE.jar' sa zdá, že výstup nie je výstupný, pokiaľ nie je na úrovni protokolu TRACE.
Ak by konfigurácia mala fungovať, ale z nejakého dôvodu sa protokoly nevypisujú, skúste zmeniť úroveň protokolu na TRACE.
2-4. Výsledok.
Ak zavoláte testMethod v TestAop.java s vyššie uvedenými nastaveniami, mal by sa vypísať nasledujúci protokol. Záznam je dlhý, takže som odstránil niekoľko riadkov, ale mal by vypisovať po dva riadky pre Entering a Exiting, spolu štyri riadky.
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. zhrnutie
Ak nie ste oboznámení s používaním DebugInterceptor, pozrite si ho.
Ďakujeme vám za sledovanie až do konca.