Anda dapat menggunakan appender Log4j2 atau Logtail untuk mengumpulkan log aplikasi Java yang direkam oleh Log4j2 dan mengirimkannya ke Simple Log Service guna kueri dan analisis.
Ikhtisar Log4j
Log4j adalah proyek open source Apache yang memungkinkan Anda mengonfigurasi tujuan log seperti console, file, komponen GUI, server socket, perekam event NT, dan daemon Syslog UNIX. Anda dapat mengontrol format output setiap entri log dan menyesuaikan pencatatan log secara detail dengan menentukan tingkat log—semuanya melalui file konfigurasi tanpa mengubah kode aplikasi. Log4j terdiri dari tiga komponen:
layouts
Layout memformat pesan log. Layout umum meliputi:
Layout
Description
HTMLLayout
Memformat log sebagai tabel HTML.
SimpleLayout
Menggunakan format output sederhana, seperti format default untuk pesan tingkat INFO.
PatternLayout
Mengeluarkan log dalam format kustom. Anda dapat menentukan urutan dan format elemen seperti timestamp, tingkat log, nama thread, nama kelas, nama metode, dan pesan log.
appenders
Appender menentukan tujuan output log. Appender umum meliputi:
Appender
Description
ConsoleAppender
Mengeluarkan log ke console.
FileAppender
Mengeluarkan log ke file.
DailyRollingFileAppender
Mengeluarkan log ke file dan membuat file log baru setiap hari.
RollingFileAppender
Mengeluarkan pesan log ke file hingga ukuran tertentu. Saat file mencapai batas ukuran, file tersebut diganti namanya dan file baru dibuat.
JDBCAppender
Menyimpan pesan log ke database.
loggers
Logger menangkap pesan log dan berfungsi sebagai titik masuk untuk pencatatan log. Setiap logger diberi tingkat log berdasarkan tingkat kepentingan atau keparahan. Log4j mendefinisikan delapan tingkat log dalam urutan prioritas menurun: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, dan ALL. Logger anak mewarisi tingkat log dari induknya. Tabel berikut menjelaskan tingkat log tersebut.
Log level
Description
OFF
Menonaktifkan semua pencatatan log.
FATAL
Menunjukkan event error parah yang akan menyebabkan aplikasi keluar.
ERROR
Menunjukkan event error yang mungkin masih memungkinkan sistem terus berjalan.
WARN
Menunjukkan situasi yang berpotensi berbahaya.
INFO
Menyoroti perkembangan aplikasi pada tingkat kasar.
DEBUG
Memberikan informasi detail yang berguna untuk debugging aplikasi.
TRACE
Menelusuri eksekusi program, menampilkan variabel, dan menunjukkan alur eksekusi.
ALL
Mencetak semua catatan log.
Logger dapat dikaitkan dengan beberapa appender, tetapi appender hanya dapat dikaitkan dengan satu layout.
Prasyarat
Project dan Logstore telah dibuat. Untuk informasi lebih lanjut, lihat Kelola Project dan Kelola Logstore.
Jika Anda menggunakan pengguna Resource Access Management (RAM) alih-alih Akun Alibaba Cloud, Anda harus memberikan izin untuk menulis data ke Logstore kepada pengguna RAM tersebut. Untuk memberikan izin ini, Anda harus terlebih dahulu membuat kebijakan kustom lalu memberikan izin kepada pengguna RAM.
Prosedur
Contoh dalam topik ini menggunakan Java dan Log4j2. Anda juga dapat menggunakan Log4j untuk program dalam bahasa lain, seperti C, C++, .NET, dan PL/SQL. Sintaks dan penggunaannya sama seperti di Java.
Langkah 1: Tambahkan file konfigurasi Log4j2
Tambahkan dependensi ke proyek Maven Anda.
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.23.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.23.1</version> </dependency> </dependencies>Ubah file konfigurasi.
Secara default, Log4j2 mencari file konfigurasi di classpath. Jika file tidak ada, buat secara manual. Contoh berikut menggunakan log4j2.xml. Dua appender didefinisikan untuk mengeluarkan log ke console dan file
app.log. Tingkat logger root diatur keerrordengan output ke console. Logger bernamacom.example.demo.logdiatur kewarndengan output ke file. Untuk informasi lebih lanjut tentang mengonfigurasi Log4j2, lihat dokumentasi resmi di Log4j – Configuring Log4j 2 (apache.org).<!-- status="WARN" mengatur status internal Log4j 2 itu sendiri, bukan logging aplikasi. Digunakan untuk menangkap dan melaporkan potensi masalah selama proses konfigurasi. --> <Configuration status="WARN"> <!-- Start: Definisikan dua appender untuk output log --> <Appenders> <!-- Mendefinisikan appender console bernama "Console". Log dicetak ke output sistem standar. --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- Mendefinisikan appender file bernama "MyFile". Log ditulis ke file "app.log". --> <File name="MyFile" fileName="app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </File> </Appenders> <!-- End: Definisikan dua appender untuk output log --> <!-- Start: Konfigurasikan perilaku logger --> <Loggers> <!-- Mendefinisikan logger bernama "com.example.demo.log" dan mengatur tingkatnya ke warn. Logger ini mereferensikan appender "MyFile", artinya log pada tingkat warn ke atas dari logger ini dikirim ke "MyFile". --> <Logger name="com.example.demo.log" level="warn"> <AppenderRef ref="MyFile" /> </Logger> <!-- Mendefinisikan logger root dan mengatur tingkatnya ke error. Logger ini mereferensikan appender "Console", artinya log pada tingkat error ke atas dikirim ke console. --> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> <!-- End: Konfigurasikan perilaku logger --> </Configuration>Gunakan logger.
Tulis kode uji untuk mendapatkan instance logger dan menghasilkan log:
public void logExampleDemo() { // Dapatkan instance logger bernama "com.example.demo.log". Logger logger = LogManager.getLogger("com.example.demo.log"); // Catat pesan log pada berbagai tingkat. logger.trace("trace level"); logger.debug("debug level"); logger.info("info level"); logger.warn("warn level"); logger.error("error level"); logger.fatal("fatal level"); }Contoh output log:
2024-05-28 13:37:16:295 CST [http-nio-8080-exec-8] TRACE com.example.demo.log - trace level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] DEBUG com.example.demo.log - debug level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] INFO com.example.demo.log - info level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] WARN com.example.demo.log - warn level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] ERROR com.example.demo.log - error level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] FATAL com.example.demo.log - fatal level
Langkah 2: Kumpulkan log Log4j
Appender Log4j2 adalah metode pengumpulan bawaan. Untuk aplikasi yang sudah terintegrasi dengan Log4j2, hanya diperlukan konfigurasi minimal untuk mengirim log secara real time tanpa menuliskannya ke disk server. Metode ini cocok untuk aplikasi data besar yang memerlukan pemrosesan real time terhadap volume log yang besar.
Untuk mengumpulkan log menggunakan Logtail, Anda harus menginstal agen Logtail di server Anda. Agen Logtail mendukung berbagai plugin pemrosesan.
Melalui Log4j2 appender
Tambahkan dependensi ke proyek Maven Anda.
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliyun-log-log4j2-appender</artifactId> <version>0.1.12</version> </dependency>Ubah file konfigurasi.
Contoh berikut menggunakan file konfigurasi XML
log4j2.xml. Jika file tidak ada, buat di direktori root proyek. Konfigurasikan appender dan loggerLoghubsebagai berikut:<Appenders> <Loghub name="Loghub" project="your project" logStore="your logStore" endpoint="your project endpoint" accessKeyId="your accessKey id" accessKeySecret="your accessKey secret" totalSizeInBytes="104857600" maxBlockMs="0" ioThreadCount="8" batchSizeThresholdInBytes="524288" batchCountThreshold="4096" lingerMs="2000" retries="10" baseRetryBackoffMs="100" maxRetryBackoffMs="100" topic="your topic" source="your source" timeFormat="yyyy-MM-dd'T'HH:mmZ" timeZone="UTC" ignoreExceptions="true"> <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/> </Loghub> </Appenders> <Loggers> <Root level="warn"> <AppenderRef ref="Loghub"/> </Root> </Loggers>Parameter
project,Logstore,endpoint,accessKeyId, danaccessKeySecretwajib diisi. Parameter opsional menggunakan nilai default jika tidak ditentukan. Tabel berikut menjelaskan parameter tersebut.Parameter
Description
project
Nama Project Anda di Simple Log Service.
Logstore
Nama Logstore Anda di Simple Log Service.
endpoint
Titik akhir publik untuk Simple Log Service. Untuk informasi lebih lanjut, lihat Service endpoint.
accessKeyId
ID AccessKey. Untuk informasi lebih lanjut, lihat Create an AccessKey.
accessKeySecret
Rahasia AccessKey. Untuk informasi lebih lanjut, lihat Create an AccessKey.
Contoh kode uji:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4j2AppenderExample { private static final Logger LOGGER = LogManager.getLogger(Log4j2AppenderExample.class); public static void main(String[] args) throws InterruptedException { LOGGER.trace("log4j2 trace log"); LOGGER.debug("log4j2 debug log"); LOGGER.info("log4j2 info log"); LOGGER.warn("log4j2 warn log"); LOGGER.error("log4j2 error log", new RuntimeException("Runtime Exception")); Thread.sleep(1000 * 5); } }
Melalui Logtail
Saat mengonfigurasi Logtail, Anda harus menentukan path file. Pastikan log aplikasi dapat ditulis ke file log.
Simple Log Service menyediakan wizard konfigurasi untuk pengumpulan log teks cepat menggunakan Logtail. Jika instance ECS dan Project Simple Log Service Anda berada di bawah akun yang sama dan di wilayah yang sama, lihat Collect text logs from servers. Jika tidak, lihat Manually install Logtail to collect text logs from servers.
Langkah 3: Lihat log
Masuk ke Konsol Simple Log Service.
Pada bagian Projects, klik Project yang diinginkan.

Pada tab , klik logstore yang diinginkan.

Verifikasi bahwa data log telah diunggah. Di Logstore, klik Consumption Preview untuk melihat log secara cepat. Untuk informasi lebih lanjut, lihat Query and analysis quick start.
Kueri dan analisis log.
PentingSetelah log diunggah ke Logstore, Anda harus membuat indeks sebelum dapat melakukan kueri dan analisis. Untuk informasi tentang konfigurasi indeks, lihat Create indexes.
Masukkan pernyataan kueri, lalu klik Last 15 Minutes untuk menentukan rentang waktu. Berikut contoh log:
level: ERROR location: com.aliyun.openservices.log.log4j.example.Log4jAppenderExample.main(Log4jAppenderExample.java:16) message: error log throwable: java.lang.RuntimeException: xxx thread: main time: 2018-01-02T03:15+0000 log: 0 [main] ERROR com.aliyun.openservices.log.log4j.example.Log4jAppenderExample - error log __source__: xxx __topic__: yyyKueri dan analisis log pada halaman Logstore.
Masukkan pernyataan kueri untuk melihat, mencari, dan memfilter data log. Untuk informasi lebih lanjut, lihat Query and analyze logs. Contoh:
Kueri tiga lokasi teratas dengan error terbanyak dalam satu jam terakhir.
level: ERROR | select location ,count(*) as count GROUP BY location ORDER BY count DESC LIMIT 3Hitung jumlah log untuk setiap tingkat log dalam 15 menit terakhir.
| select level ,count(*) as count GROUP BY level ORDER BY count DESC
Pemecahan Masalah
Jika pengumpulan log gagal setelah Anda mengonfigurasi appender Log4j2, periksa penyebab umum berikut.
1. Pemilihan dependensi
Spring Boot menggunakan Logback secara default. Jika aplikasi Anda menggunakan Spring Boot, tambahkan dependensi aliyun-log-logback-appender alih-alih appender Log4j2. Jika aplikasi Anda menggunakan Log4j2, gunakan dependensi aliyun-log-log4j2-appender.
2. Konfigurasi endpoint
Pastikan Anda telah mengonfigurasi titik akhir publik yang benar, seperti cn-hangzhou.log.aliyuncs.com.
3. Izin ID AccessKey dan rahasia AccessKey
Pastikan Pengguna Resource Access Management (RAM) diberikan izin AliyunLogFullAccess atau izin menulis pada LogStore target.
4. Nama Project dan LogStore
Pastikan nama Project dan LogStore dalam konfigurasi Anda sesuai dengan nama yang ditampilkan di Konsol Simple Log Service.
Dokumen Terkait
Untuk mempelajari cara menggunakan Logtail mengumpulkan log dari server, lihat Collect text logs from servers. Berbagai plugin tersedia untuk pemrosesan. Untuk informasi lebih lanjut, lihat Data parsing plugins.
Jika halaman pratinjau kosong atau tidak ada data yang muncul di halaman kueri setelah menggunakan Logtail untuk mengumpulkan log, lihat Troubleshoot Logtail collection errors. Kesalahan seperti kegagalan parsing regex, path file salah, atau traffic melebihi kapasitas shard dapat terjadi. Untuk melihat kesalahan pengumpulan Logtail, lihat How do I view Logtail collection errors?. Untuk kesalahan pengumpulan data umum, lihat Common collection errors.
Untuk kasus penggunaan dan pertanyaan umum (FAQ) tentang mengumpulkan log Log4j dengan appender Log4j2, lihat Log4j2 Appender. Untuk versi sebelumnya, lihat Log4j Appender.
Saat menggunakan appender Log4j2 untuk mengumpulkan log Log4j, Anda harus mengonfigurasi
accessKeyIddanaccessKeySecretAnda. Untuk informasi cara memperolehnya, lihat Create an AccessKey. Untuk mengonfigurasi titik akhir Simple Log Service, lihat Service endpoint.