Spring DebugInterceptor: logovanie AOP na úrovni TRACE pri vývoji


Dátum vydania:

Aktualizované:


Technické články > Spring DebugInterceptor: logovanie AOP na úrovni TRACE pri vývoji

Stav v roku 2026 a bezpečné používanie

Záver: Trieda Spring DebugInterceptor je interceptor AOP založený na proxy, ktorý na úrovni TRACE zaznamenáva podrobnosti o volaní metód. Slúži na ladenie, nie ako všeobecné riešenie monitorovania produkcie.

Čo sa naučíte

  • Ako advisor vyberá metódy a pripája interceptor k príslušným beanom Springu.
  • Prečo volanie metódy z tej istej inštancie a objekty vytvorené mimo kontajnera Spring môžu obísť proxy mechanizmus.
  • Ako zabrániť úniku argumentov, osobných údajov či prihlasovacích údajov a nadmernému objemu logov.

Pre koho je to určené: Vývojári Springu, ktorí udržiavajú aplikáciu konfigurovanú pomocou XML alebo sa učia klasické AOP založené na proxy.

Kontext v roku 2026: Trieda zostáva súčasťou aktuálnej dokumentácie Spring Framework, no nasledujúci príklad XML pre Spring 5.1.4 je historický. Používajte podporovanú verziu Springu, logovanie TRACE zapínajte iba pri riadenej diagnostike a v produkcii uprednostnite aktuálne metriky, distribuované trasovanie a štruktúrované logy.

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, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Táto príručka ukazuje použitie triedy DebugInterceptor z frameworku Spring. Postup vychádza z nasledujúcej stránky Springu a bol overený v nižšie uvedenom historickom prostredí.

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

Obsah

  1. Čo je DebugInterceptor?
  2. Nastavenie
  3. Zhrnutie

1. Čo je DebugInterceptor?

DebugInterceptor je interceptor AOP z knižnice spring-aop, ktorý zapisuje informácie o volaní metód do logu. V príklade sa používa verzia 5.1.4.

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

Úplný názov triedy je "org.springframework.aop.interceptor.DebugInterceptor".

AOP znamená aspektovo orientované programovanie. V Springe umožňuje pridať spoločné správanie k volaniam metód na objektoch spravovaných kontajnerom DI.

V tomto príklade sa DebugInterceptor pripojí k beanu vytvorenému pomocou @Component.

1-1. Testovacie prostredie

Výsledok sa môže medzi verziami líšiť, preto nasledujúca tabuľka uvádza použité knižnice JAR.

Verzia spring-aopspring-aop-5.1.4.RELEASE.jar
Verzia spring-beansspring-beans-5.1.4.RELEASE.jar
Logovacie knižniceslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Potrebné kroky

Postup pozostáva z týchto krokov:

  • vytvorenie beanu pomocou @Component;
  • Definícia AOP v súbore applicationContext.xml
  • nastavenie logovania.

2. Nastavenie

Nasledujúce časti ukazujú konkrétnu konfiguráciu.

2-1. Vytvorenie beanu pomocou @Component

Pripravte triedu označenú anotáciou "@Component", ako je uvedené nižšie. Metóda obsahuje iba príkaz 'return', aby bol vo výstupe viditeľný samotný zásah AOP.

TestAop.java


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

        return;

    }

}

2-2. Definícia AOP v súbore applicationContext.xml

Nakonfigurujte AOP tak, aby sa interceptor pripojil k vybranej metóde. Červenou farbou sú označené časti súvisiace s AOP.

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">
~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>

Výraz "pointcut" má tento tvar:

pointcut="execution(* názov balíka.názov triedy.názov metódy(..))"

V uvedenom príklade majú jednotlivé časti tieto hodnoty:

• názov balíka: com.example

• názov triedy: TestAop

• názov metódy: testMethod

Ak má interceptor platiť pre všetky metódy triedy, použite tento výraz:

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

2-3. Nastavenie logovania

DebugInterceptor zapisuje na úrovni TRACE, preto túto úroveň nastavte pre príslušný logger. Potrebné riadky sú označené červenou farbou; ostatné nastavenia prispôsobte svojej aplikácii.

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>

Niektoré staršie návody uvádzali úroveň DEBUG, no pri knižnici 'spring-aop-5.1.4.RELEASE.jar' sa záznamy v tomto teste zobrazili až na úrovni TRACE.

Ak je konfigurácia správna, ale záznamy sa nezobrazujú, overte, či je pre tento logger povolená úroveň TRACE.

2-4. Výsledok

Po zavolaní metódy testMethod v TestAop.java sa s uvedenou konfiguráciou zapíše nasledujúci log. Ukážka je skrátená; obsahuje dva záznamy "Entering" a dva záznamy "Exiting".

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

DebugInterceptor možno pripojiť k vybraným beanom Springu pomocou konfigurácie AOP a jeho výstup povoliť nastavením úrovne TRACE.

V produkcii ho zapínajte iba počas riadenej diagnostiky, pretože môže zaznamenať citlivé argumenty a vytvoriť veľký objem logov.