Spring DebugInterceptor: AOP izsekošanas žurnāls izstrādei


Publikācijas datums:

Atjaunināts:


Tehniskie raksti > Spring DebugInterceptor: AOP izsekošanas žurnāls izstrādei

2026. gada statuss un droša lietošana

Secinājums: Spring DebugInterceptor ir uz starpniekobjektu balstīts AOP pārtvērējs, kas TRACE līmenī reģistrē detalizētu informāciju par metožu izsaukumiem. Tas paredzēts atkļūdošanai, nevis vispārējai produkcijas vides novērošanai.

Ko jūs uzzināsiet

  • Kā Spring advisor atlasa metodes un pievieno pārtvērēju piemērotiem Spring pārvaldītiem bean objektiem.
  • Kāpēc metodes izsaukums tajā pašā objektā un ārpus Spring konteinera izveidoti objekti var apiet starpniekobjekta advice.
  • Kā nepieļaut argumentu, personas datu un piekļuves datu nonākšanu žurnālā un ierobežot žurnāla apjomu.

Kam tas paredzēts: Spring izstrādātājiem, kuri uztur ar XML konfigurētu lietojumprogrammu vai apgūst klasisko, uz starpniekobjektiem balstīto AOP.

2026. gada konteksts: klase joprojām ir pieejama aktuālajā Spring Framework dokumentācijā, taču tālāk redzamais Spring 5.1.4 XML piemērs ir vēsturisks. Izmantojiet atbalstītu Spring versiju, ieslēdziet TRACE tikai kontrolētai diagnostikai un produkcijas vidē dodiet priekšroku mūsdienīgai metrikai, trasēšanai un strukturētiem žurnāliem.

Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.

Galvenie oficiālie avoti

Pārskats

Šajā rakstā parādīts, kā izmantot Spring DebugInterceptor. Koncepcija sākotnējā rakstā bija saistīta ar adresi https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api, bet tālāk sniegts konkrēts vēsturiskas XML konfigurācijas piemērs.

Satura rādītājs

  1. Kas ir DebugInterceptor?
  2. Konfigurēšana (vēsturisks Spring 5.1.4 piemērs)
  3. Kopsavilkums

1. Kas ir DebugInterceptor?

DebugInterceptor ir Spring AOP pārtvērējs, kas žurnālā ieraksta metodes izsaukuma informāciju. Šajā vēsturiskajā piemērā izmantots Spring 5.1.4 JAR fails:

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

Izmantotā Java klase ir org.springframework.aop.interceptor.DebugInterceptor.

AOP jeb aspektorientētā programmēšana ļauj atdalītu darbību piemērot Spring DI konteinera pārvaldītu objektu metodēm. Spring to parasti īsteno ar starpniekobjektu.

Šajā piemērā DebugInterceptor tiek pievienots ar @Component reģistrētam bean objektam.

1-1. Izmantotā vide

Izmantotie JAR faili un to versijas norādītas tālāk, jo dažādās vidēs darbība var atšķirties.

Spring AOP versijaspring-aop-5.1.4.RELEASE.jar
Spring Beans versijaspring-beans-5.1.4.RELEASE.jar
Žurnāla bibliotēku versijasslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Nepieciešamās darbības

Jāveic šādas darbības:

  • jāreģistrē bean ar @Component;
  • jādefinē AOP failā applicationContext.xml;
  • jāmaina žurnāla izvades iestatījumi.

2. Konfigurēšana (vēsturisks Spring 5.1.4 piemērs)

Tālāk parādītas konfigurēšanas darbības.

2-1. Bean izveide ar @Component

Sagatavojiet klasi ar @Component anotāciju, kā parādīts tālāk. Metode neko nedara, lai piemērs demonstrētu tikai AOP darbību.

TestAop.java


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

        return;

    }

}

2-2. AOP definēšana failā applicationContext.xml

Konfigurējiet AOP pārtvērēja pievienošanai. Ar sarkanu atzīmētas ar AOP saistītās daļas.

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">
~saīsinājums~
    <!-- Pavasara AOP testēšana. -->
    <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 izteiksmes vispārīgā forma ir šāda:

pointcut="execution(* paketes nosaukums.klases nosaukums.metodes nosaukums(..))"

Šajā piemērā vērtības ir:

•paketes nosaukums: com.example

•klases nosaukums: TestAop

•metodes nosaukums: testMethod

Lai to piemērotu visām mērķa klases metodēm, izmantojiet plašāku pointcut:

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

2-3. Žurnāla izvades iestatījumu mainīšana

DebugInterceptor raksta ziņojumus TRACE līmenī, tāpēc šo līmeni ieslēdziet tikai attiecīgajam pārtvērējam. Ar sarkanu atzīmēti nepieciešamie iestatījumi; pārējās vērtības pielāgojiet savai videi.

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>

Vēsturiskajā spring-aop-5.1.4.RELEASE.jar piemērā DebugInterceptor ziņojumi parādījās TRACE, nevis DEBUG līmenī.

Ja konfigurācija ir pareiza, bet ziņojumi neparādās, pārbaudiet, vai DebugInterceptor logger ir iestatīts uz TRACE. Produkcijas vidē šo detalizēto līmeni neatstājiet ieslēgtu ilgstoši.

2-4. Rezultāts

Izsaucot TestAop.java metodi testMethod ar iepriekšējo konfigurāciju, tiek izvadīts tālāk redzamais žurnāls. Dažas rindas ir izlaistas; piemērā redzamas divas ieejas un divas izejas rindas.

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

Izmantojiet DebugInterceptor tikai kontrolētai diagnostikai, sašauriniet pointcut un pārliecinieties, ka žurnālā netiek ierakstīti sensitīvi argumenti vai atgrieztās vērtības.