Setelah menggunakan Log4j2 untuk mengelola log waktu proses aplikasi Java Anda, Anda dapat menggunakan appender Log4j2 atau Logtail untuk mengirimnya ke Simple Log Service guna dianalisis.
Ikhtisar Log4j
Log4j adalah proyek open-source dari Apache. Dengan Log4j, Anda dapat mengonfigurasi tujuan log, seperti console, file, komponen GUI, server Socket, NT Event Logger, dan daemon UNIX Syslog. Anda juga dapat mengontrol format output setiap pesan log. Dengan menentukan tingkat untuk setiap pesan log, Anda dapat mengontrol proses pembuatan log secara lebih rinci. Pengaturan ini dapat dikonfigurasi secara fleksibel dalam file konfigurasi tanpa perlu mengubah kode aplikasi. Log4j terdiri dari tiga komponen penting berikut:
-
Layouts
Layout memformat pesan log. Tabel berikut menjelaskan layout umum.
Layout
Description
HTMLLayout
Memformat output log sebagai tabel HTML.
SimpleLayout
Menerapkan format output sederhana, seperti format default untuk pesan tingkat INFO.
PatternLayout
Output log dalam format kustom. Anda dapat menentukan susunan dan format elemen seperti timestamp, tingkat log, nama thread, nama kelas, nama metode, dan pesan log.
-
Appenders
Appender mengirim pesan log ke tujuan tertentu. Anda dapat mengonfigurasi beberapa appender untuk mengirim log ke berbagai tujuan. Tabel berikut menjelaskan appender umum.
Appender
Description
ConsoleAppender
Menulis log ke console.
FileAppender
Menulis log ke file.
DailyRollingFileAppender
Menulis log ke file dan berganti ke file baru setiap hari.
RollingFileAppender
Saat ukuran file mencapai batas yang ditentukan, Log4j akan mengganti namanya dan membuat file baru.
JDBCAppender
Menyimpan pesan log ke database.
-
Loggers
Logger menangkap informasi log. Setiap logger diberi tingkat log berdasarkan tingkat kepentingan atau keparahannya. Log4j mendefinisikan delapan tingkat log, yang diurutkan dari prioritas tertinggi ke terendah: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, dan ALL. Tingkat log bersifat turun-temurun, artinya logger anak mewarisi semua tingkat log dari induknya. Tabel berikut menjelaskan setiap tingkat log.
Log level
Description
OFF
Menonaktifkan semua logging.
FATAL
Menunjukkan error parah yang menyebabkan aplikasi keluar.
ERROR
Menunjukkan error yang tidak menghentikan aplikasi.
WARN
Memberi peringatan terhadap potensi error.
INFO
Memantau perkembangan aplikasi pada tingkat tinggi.
DEBUG
Memberikan informasi detail untuk debugging.
TRACE
Memberikan informasi detail untuk melacak eksekusi program, seperti nilai variabel dan alur eksekusi.
ALL
Mengaktifkan semua tingkat log.
Sebuah logger dapat dikaitkan dengan beberapa appender, tetapi sebuah appender hanya dapat dikaitkan dengan satu layout.
Prasyarat
-
Buat proyek dan penyimpanan log. Untuk informasi selengkapnya, lihat Manage projects dan Manage logstores.
-
Jika Anda menggunakan RAM user alih-alih Akun Alibaba Cloud, Anda harus memberikan RAM user tersebut izin untuk menulis ke logstore. Untuk memberikan izin tersebut, pertama-tama buat kebijakan kustom, lalu berikan izin kepada RAM user.
Prosedur
Topik ini menggunakan bahasa Java dan Log4j2 sebagai contoh. Anda dapat menggunakan antarmuka Log4j untuk bahasa lain, seperti C, C++, .NET, dan PL/SQL. Sintaks dan penggunaannya mirip dengan Java.
Langkah 1: Konfigurasikan Log4j2
-
Tambahkan dependensi yang diperlukan 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 tidak ada, Anda harus membuatnya secara manual. Contoh berikut menunjukkan file
log4j2.xmlyang mendefinisikan dua appender untuk mengeluarkan log ke console dan file bernamaapp.log. Logger root diatur ke tingkat logerrordan mengeluarkan output ke console. Logger bernamacom.example.demo.logdiatur ke tingkat logtracedan mengeluarkan output ke file. Untuk informasi selengkapnya tentang cara mengonfigurasi Log4j2, lihat dokumentasi resmi Log4j 2 Configuration.<!-- status="WARN" sets the internal status of Log4j 2 itself, not the application logging. It is used to capture and report potential issues during the configuration process. --> <Configuration status="WARN"> <!-- Define two log output destinations (Appenders) start --> <Appenders> <!-- Defines a console appender named "Console" that prints logs to the standard system output. --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- Defines a file appender named "MyFile" that writes logs to the "app.log" file. --> <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> <!-- Define two log output destinations (Appenders) end --> <!-- Configure logging behavior (Loggers) start --> <Loggers> <!-- Defines a logger named "com.example.demo.log" with its level set to "trace". It references the "MyFile" appender, which means this logger outputs logs at the "trace" level and above to its appender ("MyFile"). --> <Logger name="com.example.demo.log" level="trace"> <AppenderRef ref="MyFile" /> </Logger> <!-- Defines the root logger with its level set to "error". It references the "Console" appender, which means logs at the "error" level and above are output to the console. --> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> <!-- Configure logging behavior (Loggers) end --> </Configuration> -
Penggunaan dasar.
Tulis kode contoh untuk membaca appender yang telah didefinisikan dan mengeluarkan log:
public void logExampleDemo() { // Get a Logger instance named "com.example.demo.log". Logger logger = LogManager.getLogger("com.example.demo.log"); // Record log messages at different levels. 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 berikut menunjukkan 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
-
Jika aplikasi Anda sudah menggunakan Log4j2, Anda dapat mengonfigurasi appender untuk mengirim log secara real time tanpa menuliskannya ke disk.
-
Logtail adalah agen yang Anda instal di server untuk mengumpulkan log dari file. Logtail juga mendukung berbagai plugin pemrosesan.
Log4j2 appender
-
Tambahkan dependensi yang diperlukan 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 bernama
log4j2.xml. Jika file tersebut tidak ada, buat di direktori root proyek Anda. Konfigurasikan appender dan logger Loghub:<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 proyek Simple Log Service Anda.
logStore
Nama logstore Anda di Simple Log Service.
endpoint
Titik akhir publik Simple Log Service. Untuk informasi selengkapnya, lihat Endpoints.
accessKeyId
ID AccessKey Anda. Untuk mendapatkannya, lihat Create an AccessKey pair.
accessKeySecret
Rahasia AccessKey Anda. Untuk mendapatkannya, lihat Create an AccessKey pair.
-
Kode contoh.
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); } }
Logtail
Saat mengonfigurasi Logtail, Anda harus memberikan path file. Pastikan aplikasi Anda dapat menulis log ke file log tersebut.
Jika instans Elastic Compute Service (ECS) dan proyek Simple Log Service Anda berada dalam akun dan wilayah yang sama, lihat Collect text logs from servers. Untuk skenario lainnya, lihat Manually install Logtail to collect text logs from servers.
Langkah 3: Lihat log
Masuk ke Simple Log Service console.
Pada bagian Projects, klik proyek yang diinginkan.

Pada tab , klik logstore yang diinginkan.

-
Verifikasi bahwa data log berhasil diunggah. Di logstore, lihat Quick start for search and analysis, lalu klik Consumption Preview untuk melihat log dengan cepat.

-
Lakukan kueri dan analisis log.
PentingSebelum dapat melakukan kueri dan analisis log, Anda harus membuat indeks untuk logstore. Untuk informasi selengkapnya tentang cara membuat indeks, lihat Create indexes.
Masukkan pernyataan kueri dan pilih rentang waktu, misalnya Last 15 Minutes. Contoh berikut menunjukkan entri 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__: yyyLakukan kueri dan analisis log pada halaman logstore.

Anda dapat memasukkan pernyataan kueri untuk melihat, mencari, dan memfilter data log. Untuk informasi selengkapnya, lihat Query and analyze logs. Contoh berikut menunjukkan pernyataan kueri sederhana:
-
Cari 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 3 -
Hitung jumlah log untuk setiap tingkat log dalam 15 menit terakhir.
| select level ,count(*) as count GROUP BY level ORDER BY count DESC
-
Topik terkait
-
Untuk mempelajari cara menggunakan Logtail untuk mengumpulkan log dari server, lihat Collect text logs from servers. Anda dapat memilih dari berbagai plugin. Untuk informasi selengkapnya, lihat Use plug-ins to process data.
-
Jika tidak ada data setelah mengonfigurasi Logtail, lihat Troubleshoot Logtail log collection errors untuk pemecahan masalah. Masalah umum termasuk kegagalan regex, path file salah, atau melebihi kapasitas shard. Anda dapat melihat error pengumpulan spesifik dengan mengikuti langkah-langkah dalam View Logtail collection errors atau merujuk daftar Common errors of data collection.
-
Untuk kasus penggunaan dan pertanyaan umum (FAQ) tentang penggunaan Log4j2 appender untuk mengumpulkan log Log4j, lihat Log4j2 Appender. Untuk versi sebelumnya, lihat Log4j Appender.
-
Log4j2 appender memerlukan ID AccessKey, Rahasia AccessKey, dan titik akhir. Untuk petunjuk cara mendapatkan informasi tersebut, lihat Create an AccessKey pair dan Endpoints.