Sådan bruger du Spring's DebugInterceptor.


Udgivelsesdato:19. januar 2021.



INFOMARTION > Sådan bruger du Spring's DebugInterceptor.

Oversigt.

Dette handler om, hvordan du bruger Spring's DebugInterceptor. Det følgende Spring-websted hjalp mig med at forstå konceptet, men det var svært at forstå, hvad man præcist skulle gøre ud fra webstedet alene, så jeg kontrollerede faktisk resultaterne.

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

Indholdsfortegnelse

  1. Hvad er en DebugInterceptor?
  2. montering
  3. resumé

1. Hvad er en DebugInterceptor?

DebugInterceptor er et bibliotek, der udsender logs ved hjælp af AOP. Især følgende biblioteker (jar-filer). Version 5.1.4.

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

Den specifikke Java-fil er "org.springframework.aop.interceptor.DebugInterceptor".

Kort fortalt er AOP en teknik til at injicere behandling i instanser, der administreres i Spring's DI-container. Det officielle navn for AOP er Aspect Oriented Programming.

I dette tilfælde ønsker vi at injicere en DebugInterceptor i den instans, der genereres af @Component.

1-1. gennemførelsesmiljø

Jeg vil gerne beskrive den anvendte Jar og den anvendte version, da der kan være små forskelle afhængigt af miljøet.

Version af spring aopspring-aop-5.1.4.RELEASE.jar
Version af forårsbønnerspring-beans-5.1.4.RELEASE.jar
Version af log output-biblioteketslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Det nødvendige arbejde.

Der kræves følgende arbejde.

  • Opret en instans med @Component.
  • Definer AOP i applicationContext.xml
  • Ændring af indstillingerne for logudgang

2. montering

Nu vil jeg gerne gennemføre det i praksis.

2-1. Opret en instans med @Component.

Forbered en klasse med "@Component", der er erklæret som følger. Udfør kun "return", da du kun ønsker at se AOP'en.

TestAop.java


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

        return;

    }

}

2-2. Definer AOP i applicationContext.xml

Opsæt AOP'en til at injicere processen. De røde områder er de områder, der er relevante for det årlige operationelle 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">
~forkortelse~
    <!-- AOP-afprøvning i foråret. -->
    <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' skrives som følger.

pointcut="execution(* pakkens navn.klassens navn.metode-navn(..))"

I eksemplet ovenfor ville det være som følger.

・pakkens navn:com.example

・klassens navn:TestAop

・metode-navn:testMethod

Hvis du ønsker at anvende den på alle metoder, gælder følgende.

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

2-3. Ændring af indstillingerne for logudgang

Ændr logningsniveauet kun for DebugInterceptor, da niveauet for logoutput, der er beskrevet i DebugInterceptor, er "TRACE". Områder med rødt er de områder, der skal indstilles. Resten af indstillingerne kan angives vilkårligt.

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>

Jeg kiggede på nogle andres blogs, da jeg oprettede den, og nogle af dem sagde, at output skal udgives på logniveau DEBUG, men i tilfælde af "spring-aop-5.1.4.RELEASE.jar" ser det ud til, at output ikke udgives, medmindre det er på logniveau TRACE.

Hvis konfigurationen burde fungere, men logfilerne af en eller anden grund ikke vises, kan du prøve at ændre logniveauet til TRACE.

2-4. Resultat.

Hvis du kalder testMethod i TestAop.java med ovenstående indstillinger udført, bør følgende log vises. Loggen er lang, så jeg har slettet et par linjer, men den skal vise to linjer hver for Entering og Exiting, så der er i alt fire linjer.

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. resumé

Hvis du ikke er bekendt med brugen af DebugInterceptor, henvises du til den.

Tak, fordi du kiggede med til slutningen.




■INFORMATION

Klik her for at gå til den øverste side med oplysninger.


■PROFILE

Klik her for at se en profil.


■Kontaktoplysninger.

For forespørgsler om artiklen kan du kontakte os her.