Spring DebugInterceptor: AOP TRACE beleženje pri razvoju


Datum objave:

Osveženo:


Tehnični članki > Spring DebugInterceptor: AOP TRACE beleženje pri razvoju

Status in varna uporaba 2026

Sklep: Pomlad DebugInterceptor je na posredniku osnovan prestreznik AOP, ki na ravni TRACE beleži podrobnosti o metodi invokacije. Namenjena je razhroščevanju, ne pa splošni strategiji opazovanja proizvodnje.

Kaj se boš naučil?

  • Kako svetovalec izbere metode in pritrdi prestreznik na upravičenih Spring fižol.
  • Zakaj samoiniciativnost in predmeti ustvarjeni zunaj posode Spring lahko zaobidejo posredniški nasvet.
  • Kako se izogniti razkrivanju argumentov, osebnih podatkov, poverilnic ali pretiranega obsega dnevnika.

Za koga je to? Vzporedni razvijalci, ki vzdržujejo program XML ali se učijo klasičnega AOP, ki temelji na posredniku.

Kontekst za leto 2026: Razred še vedno obstaja v sedanji dokumentaciji Spring Frameworka, vendar je spodnji primer Spring 5.1.4 XML zgodovinski. Uporabite podprto Spring linijo, omejite sečnjo TRACE za nadzorovano diagnostiko, in raje trenutne meritve, sledenje, in strukturirano sečnjo za proizvodne dejavnosti.

Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.

Glavni uradni viri

Pregled.

To je o tem, kako uporabiti Springov DebugInterceptor. Naslednja spletna stran Spring mi je pomagala razumeti koncept, vendar je bilo samo na spletni strani težko razumeti, kaj natančno je treba storiti, zato sem dejansko preveril rezultate.

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

Kazalo vsebine

  1. Kaj je DebugInterceptor?
  2. montaža
  3. povzetek

1. Kaj je DebugInterceptor?

DebugInterceptor je knjižnica, ki izpisuje dnevnike z AOP. Zlasti naslednje knjižnice (datoteke JAR). Različica 5.1.4.

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

Posebna datoteka Java je "org.springframework.aop.interceptor.DebugInterceptor".

Na kratko, AOP je tehnika za vbrizgavanje obdelave v instance, ki se upravljajo v Springovem vsebniku DI. Uradno ime za AOP je v vidik usmerjeno programiranje.

V tem primeru želimo injicirati DebugInterceptor v primerek, ki ga ustvari @Component.

1-1. okolje izvajanja

Rad bi opisal uporabljeni JAR in različico, saj lahko pride do manjših razlik glede na okolje.

Različica spomladi aopspring-aop-5.1.4.RELEASE.jar
Različica spomladanskega fižolaspring-beans-5.1.4.RELEASE.jar
Različica knjižnice za izpis dnevnikaslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Potrebno delo.

Potrebna so naslednja dela.

  • Ustvarite primerek z @Component.
  • Opredelitev AOP v applicationContext.xml
  • Spreminjanje nastavitev izpisa dnevnika

2. montaža

Zdaj bi ga rad izvedel v praksi.

2-1. Ustvarite primerek z @Component.

Pripravite razred z deklaracijo "@Component", kot sledi. Izvedite samo "return", saj želite videti samo AOP.

TestAop.java


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

        return;

    }

}

2-2. Opredelitev AOP v applicationContext.xml

Nastavite postopek AOP za injiciranje procesa. Rdeča območja so tista, ki so pomembna za operativni program.

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 jo želite uporabiti za vse metode, velja naslednje.

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

2-3. Spreminjanje nastavitev izpisa dnevnika

Spremenite raven beleženja samo za DebugInterceptor, saj je raven izpisa dnevnika, opisana v DebugInterceptorju, "TRACE". Z rdečo so označena področja, ki jih je treba nastaviti. Ostale nastavitve lahko vnesete poljubno.

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>

Pri ustvarjanju sem si ogledal bloge nekaterih drugih ljudi in nekateri so navedli, da je treba izhod izpisati na ravni dnevnika DEBUG, vendar se v primeru 'spring-aop-5.1.4.RELEASE.jar' zdi, da se izhod ne izpisuje, razen če je na ravni dnevnika TRACE.

Če bi konfiguracija morala delovati, vendar se dnevniki iz nekega razloga ne izpisujejo, poskusite spremeniti raven dnevnika na TRACE.

2-4. Rezultat.

Če pokličete testMethod v TestAop.java z zgornjimi nastavitvami, se izpiše naslednji dnevnik. Dnevnik je dolg, zato sem izbrisal nekaj vrstic, vendar bi se moralo izpisati po dve vrstici za vstop in izstop, skupaj torej štiri vrstice.

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

Če niste seznanjeni z uporabo DebugInterceptorja, si ga oglejte.

Upamo, da je bila razlaga koristna.