Spring DebugInterceptor: AOP trasování protokolů pro vývoj


Publikováno:

Aktualizováno:


Články › Spring DebugInterceptor: AOP trasování protokolů pro vývoj

Stav v roce 2026 a bezpečné použití

Závěr: Spring DebugInterceptor je proxy interceptor pro AOP, který na úrovni TRACE zaznamenává podrobnosti o volání metod. Slouží k ladění, nikoli jako obecné řešení observability v produkci.

Co se dozvíte

  • Jak advisor vybírá metody a připojuje interceptor k odpovídajícím Spring beanům.
  • Proč self-invocation a objekty vytvořené mimo Spring container mohou obejít proxy advice.
  • Jak se vyhnout odhalení argumentů, osobních údajů, přihlašovacích údajů nebo nadměrného objemu protokolů.

Pro koho je článek určen: Spring vývojářům, kteří udržují aplikaci konfigurovanou pomocí XML nebo se učí klasické proxy AOP.

Aktuální stav v roce 2026: Třída stále existuje v aktuální dokumentaci Spring Framework, ale níže uvedený příklad XML Spring 5.1.4 je historický. Použijte podporovanou řadu Spring, omezte protokolování TRACE na řízenou diagnostiku a upřednostněte aktuální metriky, trasování a strukturované protokolování pro výrobní operace.

Bezpečnostní poznámka: Příkazy a konfigurační příklady z původního článku nebyly znovu spuštěny v současném produkčním prostředí. Před nasazením ověřte podporované verze, vytvořte zálohu a připravte postup návratu v odděleném testovacím prostředí.

Oficiální zdroje

Přehled

Toto je návod na použití nástroje DebugInterceptor od společnosti Spring. Následující webová stránka Spring mi pomohla pochopit koncept, ale bylo obtížné pochopit, co přesně dělat z webové stránky sám, takže jsem vlastně ověřil výsledky.

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

Obsah

  1. Co je DebugInterceptor?
  2. montáž
  3. Shrnutí

1. Co je DebugInterceptor?

DebugInterceptor je knihovna, která vypisuje protokoly pomocí AOP. Konkrétně se jedná o následující knihovny (soubory JAR). Verze 5.1.4.

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

Konkrétní soubor jazyka Java je "org.springframework.aop.interceptor.DebugInterceptor".

Stručně řečeno, AOP je technika pro injektování zpracování do instancí spravovaných v kontejneru Spring DI. Oficiální název pro AOP je aspektově orientované programování.

V tomto případě chceme do instance generované pomocí @Component injektovat DebugInterceptor.

1-1. implementační prostředí

Následující část popisuje použitý Jar a verzi, protože v závislosti na prostředí mohou existovat drobné rozdíly.

Verze spring aopspring-aop-5.1.4.RELEASE.jar
Verze jarních fazolíspring-beans-5.1.4.RELEASE.jar
Verze výstupní knihovny protokoluslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Požadované práce.

Požadované práce jsou následující.

  • Vytvoření instance pomocí @Component.
  • Definice AOP v souboru applicationContext.xml
  • Změna nastavení výstupu protokolu

2. montáž

Nyní bych ji rád zavedl do praxe.

2-1. Vytvoření instance pomocí @Component.

Připravte si třídu s deklarací "@Component" následujícím způsobem. Proveďte pouze příkaz 'return', protože chcete zobrazit pouze AOP.

TestAop.java


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

        return;

    }

}

2-2. Definice AOP v souboru applicationContext.xml

Nastavte AOP pro injektování procesu. Červeně jsou vyznačeny oblasti, které se týkají 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">
~zkrácení~
    <!-- Jarní testování 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' se zapisuje takto.

pointcut="execution(* název balíčku.název třídy.název metody(.).)"

Ve výše uvedeném příkladu by to bylo následující.

·název balíčku:com.example

·název třídy:TestAop

·název metody:testMethod

Pokud ji chcete použít pro všechny metody, platí následující.

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

2-3. Změna nastavení výstupu protokolu

Změňte úroveň protokolování pouze pro DebugInterceptor, protože úroveň výstupu protokolu popsaná v DebugInterceptoru je "TRACE". Červeně jsou označeny oblasti, které je třeba nastavit. Ostatní nastavení lze zadat libovolně.

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>

Při vytváření jsem se díval na blogy jiných lidí a někteří uváděli, že výstup by měl být vyveden na úrovni protokolu DEBUG, ale v případě 'spring-aop-5.1.4.RELEASE.jar' se zdá, že výstup není vyveden, pokud není na úrovni protokolu TRACE.

Pokud by konfigurace měla fungovat, ale z nějakého důvodu se protokoly nevypisují, zkuste změnit úroveň protokolu na TRACE.

2-4. Výsledek.

Pokud zavoláte testMethod v TestAop.java s výše uvedeným nastavením, měl by se zobrazit následující protokol. Protokol je dlouhý, takže jsem několik řádků smazal, ale měl by vypisovat po dvou řádcích pro Entering a Exiting, celkem tedy čtyři řádky.

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. shrnutí

Pokud nejste obeznámeni s použitím nástroje DebugInterceptor, přečtěte si jej.

Tím jsou shrnuty hlavní kroky a omezení, která je třeba zohlednit.