Spring DebugInterceptor: AOP nyomkövetéses naplózás a fejlesztéshez


Közzétéve:

Frissítve:


Cikkek › Spring DebugInterceptor: AOP nyomkövetéses naplózás a fejlesztéshez

A 2026-os helyzet és biztonságos használat

Következtetés: A Spring DebugInterceptor proxyalapú AOP-interceptor, amely TRACE-szinten naplózza a metódushívások részleteit. Hibakeresésre való, nem pedig az éles rendszer általános megfigyelhetőségi megoldásának.

Amit megtudhat

  • Hogyan választja ki egy advisor a metódusokat, és hogyan kapcsolja az interceptort a megfelelő Spring beanekhez.
  • Miért kerülheti meg a proxy advice-t a self-invocation és a Spring containeren kívül létrehozott objektum.
  • Hogyan előzhető meg a paraméterek, személyes adatok, hitelesítő adatok vagy túl nagy mennyiségű napló rögzítése.

Kinek szól a cikk: Spring-fejlesztőknek, akik XML-lel konfigurált alkalmazást tartanak karban, vagy a klasszikus proxyalapú AOP működését tanulják.

Aktuális helyzet 2026-ban: Az osztály továbbra is szerepel a Spring Framework aktuális dokumentációjában, az alábbi Spring 5.1.4-es XML-példa azonban történeti. Használjon támogatott Spring-verzióágat, a TRACE-naplózást korlátozza ellenőrzött diagnosztikára, éles üzemben pedig részesítse előnyben a korszerű metrikákat, tracinget és strukturált naplózást.

Biztonsági megjegyzés: Az eredeti cikk parancsait és konfigurációs példáit nem futtattuk újra modern éles környezetben. Alkalmazás előtt ellenőrizze a támogatott verziókat, készítsen biztonsági másolatot, és külön tesztkörnyezetben készítse elő a visszaállítást.

Hivatalos források

Áttekintés

Ez a Spring DebugInterceptor használatáról szól. A következő Spring weboldal segített megérteni a koncepciót, de nehéz volt megérteni, hogy mit kell pontosan csinálni csak a weboldalról, így ténylegesen ellenőriztem az eredményeket.

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

Tartalomjegyzék

  1. Mi az a DebugInterceptor?
  2. szerelés
  3. Összefoglalás

1. Mi az a DebugInterceptor?

A DebugInterceptor egy olyan könyvtár, amely naplókat ad ki az AOP segítségével. Konkrétan a következő könyvtárak (JAR-fájlok). 5.1.4. verzió.

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

A konkrét Java fájl az "org.springframework.aop.interceptor.DebugInterceptor".

Röviden, az AOP egy olyan technika, amely a Spring DI konténerén kezelt példányokba injektálja a feldolgozást. Az AOP hivatalos neve Aspektusorientált programozás.

Ebben az esetben egy DebugInterceptort szeretnénk beilleszteni a @Component által generált példányba.

1-1. végrehajtási környezet

A következőkben ismertetjük a használt Jar-t és verziót, mivel a környezettől függően lehetnek kisebb eltérések.

A tavaszi aop verziójaspring-aop-5.1.4.RELEASE.jar
A tavaszi bab változataspring-beans-5.1.4.RELEASE.jar
A napló kimeneti könyvtár verziójaslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Szükséges munka.

A szükséges munka a következő.

  • Hozzon létre egy példányt a @Component segítségével.
  • Az AOP meghatározása az applicationContext.xml-ben
  • Napló kimeneti beállítások módosítása

2. szerelés

Most a gyakorlatban szeretném megvalósítani.

2-1. Hozzon létre egy példányt a @Component segítségével.

Készítsünk egy osztályt a következőképpen deklarált "@Component" kifejezéssel. Csak a 'return' parancsot hajtsa végre, mivel csak az AOP-t szeretné látni.

TestAop.java


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

        return;

    }

}

2-2. Az AOP meghatározása az applicationContext.xml-ben

Állítsa be az AOP-t a folyamat befecskendezéséhez. A piros színnel jelölt területek az AOP szempontjából relevánsak.

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">
~rövidítés~
    <!-- Spring AOP tesztelés. -->
    <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>

A 'pointcut' a következőképpen íródik.

pointcut="execution(* csomag neve.osztály neve.method-name(.).)"

A fenti példában ez a következőképpen néz ki.

·csomag neve:com.example

·osztály neve:TestAop

·method-name:testMethod

Ha az összes módszerre alkalmazni szeretné, akkor a következőket kell alkalmazni.

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

2-3. Napló kimeneti beállítások módosítása

A naplózási szintet csak a DebugInterceptor esetében változtassa meg, mivel a DebugInterceptorban leírt naplókiadási szint a "TRACE". A piros színnel jelölt területek azok, amelyeket be kell állítani. A többi beállítás tetszőlegesen megadható.

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>

Megnéztem néhány más ember blogját, amikor létrehoztam, és néhányan azt állították, hogy a kimenetet DEBUG naplózási szinten kell kiadni, de a 'spring-aop-5.1.4.RELEASE.jar' esetében úgy tűnik, hogy a kimenet nem jelenik meg, hacsak nem a TRACE naplózási szinten van.

Ha a konfigurációnak működnie kellene, de a naplók valamilyen oknál fogva nem jelennek meg, próbálja meg a naplószintet TRACE-re változtatni.

2-4. Eredmény.

Ha a TestAop.java állományban a testMethod-t a fenti beállításokkal hívja meg, a következő naplót kell kiadnia. A napló hosszú, ezért töröltem néhány sort, de a be- és kilépéshez két-két sort kell írnia, összesen négy sort.

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. összefoglaló

Ha nem ismeri a DebugInterceptor használatát, kérjük, olvassa el.

Ezek a legfontosabb figyelembe veendő lépések és korlátozások.