Spring DebugInterceptor: beleženje AOP na ravni TRACE med razvojem


Datum objave:

Posodobljeno:


Tehnični članki > Spring DebugInterceptor: beleženje AOP na ravni TRACE med razvojem

Stanje in varna uporaba v letu 2026

Bistvo: Springov DebugInterceptor je prestreznik AOP na osnovi posredniškega objekta, ki na ravni TRACE beleži podrobnosti klicev metod. Namenjen je razhroščevanju, ne splošni strategiji spremljanja produkcije.

Kaj boste izvedeli

  • Kako advisor izbere metode in prestreznik doda ustreznim Springovim zrnom.
  • Zakaj samoklici in objekti, ustvarjeni zunaj vsebnika Spring, lahko obidejo posredniški objekt.
  • Kako preprečiti razkritje argumentov, osebnih podatkov in poverilnic ter prevelik obseg dnevnikov.

Komu je članek namenjen? Razvijalcem Spring, ki vzdržujejo konfiguracijo XML ali se učijo klasičnega AOP na osnovi posredniških objektov.

Opomba za leto 2026: Razred je še vedno v aktualni dokumentaciji Spring Frameworka, vendar je spodnji primer s Springom 5.1.4 in XML zgodovinski. Uporabite podprto vejo Springa, beleženje TRACE omejite na nadzorovano diagnostiko, za produkcijo pa raje uporabite sodobne metrike, sledenje in strukturirane dnevnike.

Varnostna opomba: Ukazi in konfiguracijski primeri iz prvotnega članka niso bili znova preizkušeni v sodobnem produkcijskem okolju. Pred uporabo v ločenem preizkusnem okolju preverite podprte različice, izdelajte varnostne kopije ter določite nadzor dostopa in postopek povrnitve.

Uradni viri

Pregled

Ta članek prikazuje uporabo Springovega DebugInterceptorja in rezultat preizkusa, ki dopolnjuje uradno dokumentacijo.

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

Kazalo vsebine

  1. Kaj je DebugInterceptor?
  2. Nastavitev
  3. Povzetek

1. Kaj je DebugInterceptor?

DebugInterceptor je prestreznik, ki prek AOP beleži klice metod. Prvotni preizkus uporablja naslednji artefakt Spring AOP različice 5.1.4.

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

Polno ime razreda je "org.springframework.aop.interceptor.DebugInterceptor".

AOP oziroma vidikovno usmerjeno programiranje omogoča dodajanje prečnih opravil objektom, ki jih upravlja Springov vsebnik DI.

V tem primeru je DebugInterceptor dodan zrnu, ustvarjenemu z @Component.

1-1. Izvajalno okolje

Uporabljeni artefakt JAR in njegova različica sta navedena, ker se vedenje med okolji lahko nekoliko razlikuje.

Različica Spring AOPspring-aop-5.1.4.RELEASE.jar
Različica Spring Beansspring-beans-5.1.4.RELEASE.jar
Različici knjižnic za beleženjeslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Potrebna opravila

Potrebna so naslednja opravila:

  • ustvarjanje zrna z @Component;
  • opredelitev AOP v applicationContext.xml;
  • nastavitev ravni beleženja.

2. Nastavitev

Naslednji koraki prikazujejo praktično nastavitev.

2-1. Ustvarjanje zrna z @Component

Pripravite razred z anotacijo "@Component", kot je prikazano spodaj. Metoda samo vrne vrednost, da je izpis AOP lažje opazovati.

TestAop.java


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

        return;

    }

}

2-2. Opredelitev AOP v applicationContext.xml

Nastavite AOP tako, da prestreznik doda Springovemu zrnu. Pomembni deli konfiguracije so na sliki označeni z rdečo.

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">
~okrajšava~
    <!-- Spomladansko testiranje 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' je zapisan na naslednji način.

pointcut="execution(* ime paketa.ime razreda.ime metode(..))"

V zgornjem primeru bi bilo to naslednje.

•ime paketa: com.example

•ime razreda: TestAop

•ime metode: testMethod

Če želite prestreznik uporabiti za vse metode, uporabite naslednji pointcut.

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

2-3. Nastavitev ravni beleženja

Raven beleženja nastavite na TRACE samo za DebugInterceptor, ker ta prestreznik podrobnosti klicev beleži na tej ravni. Z rdečo so označeni deli, ki jih je treba nastaviti; druge nastavitve prilagodite svojemu okolju.

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>

Nekateri starejši primeri omenjajo raven DEBUG, vendar je pri artefaktu "spring-aop-5.1.4.RELEASE.jar" prikazani izpis zahteval raven TRACE.

Če je konfiguracija videti pravilna, dnevniki pa se ne izpisujejo, preverite, ali je raven za DebugInterceptor nastavljena na TRACE.

2-4. Rezultat

Ob klicu metode testMethod v TestAop.java se izpiše naslednji dnevnik. Prikaz je skrajšan; vidni sta po dve vrstici ob vstopu in izstopu, skupaj štiri.

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

DebugInterceptor je uporaben za ciljno razvojno diagnostiko klicev metod. Beleženje TRACE omejite na nadzorovano okolje in pred vklopom preverite, ali bi lahko razkrilo občutljive argumente.

Pri uporabi v novejšem okolju upoštevajte tudi opombe o različicah in varnosti na začetku članka.