Spring DebugInterceptor: logging jejak AOP untuk pengembangan
Tanggal publikasi:
Diperbarui:
Artikel teknis > Spring DebugInterceptor: logging jejak AOP untuk pengembangan
Konteks 2026 dan penggunaan yang aman
Kesimpulan: Spring DebugInterceptor adalah interceptor berbasis proxy AOP yang mencatat detail pemanggilan metode pada level TRACE. Fitur ini ditujukan untuk debugging, bukan sebagai strategi observabilitas umum di produksi.
Yang akan Anda pelajari
- Bagaimana advisor memilih metode dan memasang interceptor pada bean Spring yang cocok.
- Mengapa self-invocation dan object yang dibuat di luar container Spring dapat melewati advice berbasis proxy.
- Cara menghindari memaparkan argumen, data pribadi, kredensial, atau volume log yang berlebihan.
Untuk siapa ini: Pengembang Spring yang memelihara aplikasi dengan konfigurasi XML atau mempelajari mekanisme proxy AOP klasik.
Konteks 2026: Class ini masih tersedia dalam dokumentasi Spring Framework, tetapi contoh XML berbasis Spring 5.1.4 di bawah merupakan konfigurasi lama. Gunakan versi Spring yang masih didukung, batasi TRACE logging pada sesi diagnosis, dan gunakan metrics, tracing, serta structured logging untuk operasi produksi.
Catatan keamanan: Contoh perintah dan konfigurasi dalam artikel asli belum dijalankan ulang dalam lingkungan produksi saat ini. Verifikasi versi yang didukung, cadangan, kendali akses, dan langkah rollback dalam lingkungan tes yang terpisah sebelum menerapkannya.
Sumber resmi utama
Ikhtisar
Artikel ini menunjukkan cara memasang Spring DebugInterceptor pada bean tertentu melalui konfigurasi AOP berbasis XML, mengaktifkan TRACE logging, dan memeriksa outputnya. Dokumentasi Spring berikut menjadi acuan konsep dan API.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api
Daftar isi
1. Apa yang dimaksud dengan DebugInterceptor?
DebugInterceptor adalah class dalam modul Spring AOP yang mencatat masuk dan keluarnya pemanggilan metode pada level TRACE. Contoh ini memakai artifact dan versi berikut.
https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE
Nama class lengkapnya adalah "org.springframework.aop.interceptor.DebugInterceptor".
Aspect-Oriented Programming (AOP) memungkinkan pemrosesan tambahan diterapkan pada bean yang dikelola container Spring. Pada contoh ini, proxy Spring menjalankan DebugInterceptor saat metode target dipanggil.
Targetnya adalah bean yang dibuat melalui @Component dan dipilih oleh ekspresi pointcut.
1-1. Lingkungan contoh
Perilaku dan konfigurasi dapat berbeda antarversi. Contoh asli menggunakan JAR berikut.
| Versi Spring AOP | spring-aop-5.1.4.RELEASE.jar |
|---|---|
| Versi Spring Beans | spring-beans-5.1.4.RELEASE.jar |
| Versi library logging | slf4j-api-1.7.25.jar logback-core-1.2.3.jar |
1-2. Langkah yang diperlukan
Konfigurasi terdiri atas tiga langkah berikut.
- Membuat bean dengan @Component
- Mendefinisikan AOP dalam applicationContext.xml
- Mengatur output log pada level TRACE
2. Penerapan
Bagian berikut menerapkan ketiga langkah tersebut pada konfigurasi contoh.
2-1. Membuat bean dengan @Component
Siapkan class dengan anotasi "@Component" seperti berikut. Metodenya sengaja tidak melakukan pemrosesan lain agar output AOP mudah diamati.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Mendefinisikan AOP dalam applicationContext.xml
Tambahkan definisi AOP yang memasang interceptor pada metode target. Bagian berwarna merah menunjukkan konfigurasi yang berkaitan dengan AOP.
<?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">
~ringkasan~
<!-- Pengujian Spring 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>
Ekspresi pointcut mengikuti bentuk berikut.
pointcut="execution(* nama-paket.nama-class.nama-metode(..))"
Pada contoh di atas, nama paketnya adalah com.example, nama class-nya TestAop, dan nama metodenya testMethod.
Untuk menargetkan semua metode pada class tersebut, gunakan pola berikut.
pointcut="execution(* com.example.TestAop.*(..))"
2-3. Mengatur level output log
DebugInterceptor mencatat pesan pada level TRACE. Atur level tersebut hanya untuk logger yang diperlukan agar volume log lain tidak ikut meningkat. Bagian berwarna merah menunjukkan konfigurasi yang relevan; sesuaikan appender lain dengan lingkungan Anda.
<?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>
Pada spring-aop-5.1.4.RELEASE.jar, pesan DebugInterceptor dikeluarkan pada level TRACE, bukan DEBUG.
Jika konfigurasi proxy sudah benar tetapi pesan tidak terlihat, pastikan logger yang sesuai benar-benar mengaktifkan TRACE. Hindari mengaktifkan level ini secara luas di produksi karena log dapat menjadi sangat banyak dan mungkin memuat data sensitif.
2-4. Memeriksa hasil
Setelah konfigurasi diterapkan, pemanggilan testMethod pada TestAop.java menghasilkan log seperti berikut. Beberapa bagian dipangkas; contoh memperlihatkan dua pesan Entering dan dua pesan Exiting.
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. Ringkasan
DebugInterceptor membantu melihat batas pemanggilan metode pada bean yang diproksikan Spring. Terapkan pointcut secara sempit, aktifkan TRACE hanya saat diagnosis, dan gunakan solusi observabilitas yang lebih terkontrol untuk operasi produksi.
Artikel teknis
Profil
Kontak