Spring DebugInterceptor: geliştirme için AOP izleme logları


Yayın tarihi:

Güncelleme:


Teknik makaleler > Spring DebugInterceptor: geliştirme için AOP izleme logları

2026 bağlamı ve güvenli kullanım

Sonuç: Spring DebugInterceptor, metot çağrılarını TRACE düzeyinde ayrıntılı biçimde loglayan proxy tabanlı bir AOP interceptor'dır. Genel amaçlı üretim gözlemlenebilirliği için değil, kontrollü hata ayıklama için kullanılmalıdır.

Ne öğreneceksiniz

  • Advisor'ın metotları nasıl seçtiği ve interceptor'ı uygun Spring bean'lerine nasıl uyguladığı.
  • Self-invocation ve Spring container dışında oluşturulan nesnelerin proxy advice'ı neden atlayabildiği.
  • Argüman, kişisel veri ve kimlik bilgilerinin açığa çıkmasını ya da aşırı log hacmini önleme.

Kimler için: XML ile yapılandırılmış bir uygulamanın bakımını yapan veya klasik proxy tabanlı AOP'yi öğrenen Spring geliştiricileri.

2026 bağlamı: Sınıf güncel Spring Framework belgelerinde hâlâ yer alsa da aşağıdaki Spring 5.1.4 XML örneği tarihseldir. Desteklenen bir Spring sürümü kullanın, TRACE loglamayı kontrollü tanı oturumlarıyla sınırlayın; üretimde güncel metrik, tracing ve yapılandırılmış loglama araçlarını tercih edin.

Güvenlik notu: Orijinal makaledeki komutlar ve yapılandırma örnekleri mevcut üretim ortamında yeniden çalıştırılmamıştır. Desteklenen sürümleri, yedeklemeleri, erişim kontrollerini ve geri alma adımlarını uygulamadan önce ayrı bir test ortamında doğrulayın.

Başlıca resmî kaynaklar

Genel bakış

Bu makale Spring DebugInterceptor'ın proxy tabanlı AOP ile nasıl yapılandırıldığını gösterir. Aşağıdaki resmî referans kavramı açıklar; burada ise tarihsel XML yapılandırması adım adım ele alınır.

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

İçindekiler

  1. DebugInterceptor nedir?
  2. Yapılandırma
  3. Özet

1. DebugInterceptor nedir?

DebugInterceptor, metot çağrılarının giriş ve çıkış ayrıntılarını AOP üzerinden loglayan Spring sınıfıdır. Aşağıdaki bağlantı, bu tarihsel örnekte kullanılan Spring AOP 5.1.4 artefaktını gösterir.

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

Sınıfın tam adı org.springframework.aop.interceptor.DebugInterceptor'dır.

AOP (Aspect-Oriented Programming), kesişen davranışları Spring container tarafından yönetilen nesnelere proxy üzerinden uygulamayı sağlar.

Bu örnekte DebugInterceptor, @Component ile oluşturulan bean'in seçilen metoduna advice olarak uygulanır.

1-1. Örnek ortam

Davranış sürüme göre değişebileceği için tarihsel örnekte kullanılan JAR dosyaları aşağıda listelenmiştir.

Spring AOP sürümüspring-aop-5.1.4.RELEASE.jar
Spring Beans sürümüspring-beans-5.1.4.RELEASE.jar
Loglama kitaplıklarıslf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. Gerekli adımlar

Yapılandırma üç adımdan oluşur:

  • @Component ile bir Spring bean'i oluşturmak;
  • AOP advisor'ını applicationContext.xml içinde tanımlamak;
  • DebugInterceptor için log düzeyini TRACE olarak ayarlamak.

2. Yapılandırma

Aşağıdaki bölüm tarihsel Spring 5.1.4 XML yapılandırmasını gösterir.

2-1. @Component ile bir bean oluşturma

@Component ile işaretlenmiş aşağıdaki sınıfı hazırlayın. Metot, yalnızca interceptor davranışını göstermek için hemen döner.

TestAop.java


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

        return;

    }

}

2-2. AOP'yi applicationContext.xml'de tanımlayın

Interceptor'ı seçilen metoda uygulamak için AOP yapılandırmasını ekleyin. Kırmızı bölümler AOP ile ilgili tanımları gösterir.

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">
~KISALTMA~
    <!-- Spring AOP testi. -->
    <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 ifadesinin genel biçimi şöyledir:

pointcut="execution(* paket adı.sınıf adı.yöntem-adı(..))"

Bu örnekte parçalar şöyledir:

• paket adı: com.example

• sınıf adı: TestAop

• yöntem-adı: testMethod

Aynı sınıftaki tüm metotları eşleştirmek için yıldız kullanılabilir:

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

2-3. Log düzeyini ayarlama

DebugInterceptor TRACE düzeyinde log üretir. Bu nedenle düzeyi yalnızca ilgili logger için yükseltin; diğer logger ayarlarını uygulamanızın gereksinimlerine göre bırakın.

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>

Bazı eski örnekler DEBUG düzeyinden söz etse de spring-aop-5.1.4.RELEASE.jar ile bu interceptor'ın çıktısı TRACE düzeyindedir.

Log görünmüyorsa önce logger adını ve TRACE ayarını, ardından bean'in gerçekten Spring proxy'si üzerinden çağrıldığını doğrulayın.

2-4. Çıktıyı doğrulama

Yapılandırmadan sonra TestAop.testMethod proxy üzerinden çağrıldığında aşağıdakine benzer TRACE satırları oluşur. Örnek kısaltılmıştır; giriş ve çıkış kayıtları çağrının interceptor tarafından yakalandığını gösterir.

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. Özet

DebugInterceptor, Spring proxy'sinden geçen metot çağrılarını ayrıntılı olarak incelemek için kullanışlıdır. TRACE logları hassas veri ve yüksek hacim üretebileceğinden, yalnızca kontrollü geliştirme veya tanılama ortamlarında kısa süreyle etkinleştirin.