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?
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.
@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.
<?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.
<?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.