Setelah menggunakan Log4j2 untuk mencatat dan mengelola log operasional aplikasi Java, Anda dapat menggunakan Log4j2 appender atau Logtail untuk mengumpulkan log ke Layanan Log Sederhana guna kueri dan analisis lebih lanjut.
Ikhtisar Log4j
Apache Log4j adalah proyek sumber terbuka yang memungkinkan Anda mengonfigurasi tujuan keluaran log ke konsol, file, komponen GUI, server socket, perekam acara NT, atau daemon Syslog UNIX. Apache Log4j juga memungkinkan Anda menetapkan format keluaran untuk setiap log serta mendefinisikan tingkat log untuk pengelolaan pembuatan log secara lebih rinci. Konfigurasi ini hanya memerlukan file konfigurasi tanpa perlu memodifikasi kode aplikasi. Log4j terdiri dari komponen utama berikut:
Layouts
Layout digunakan untuk memformat log ke dalam format tertentu. Tabel berikut menjelaskan layout umum.
Layout
Deskripsi
HTMLLayout
Memformat log sebagai tabel HTML.
SimpleLayout
Memformat log ke dalam format sederhana, seperti log tingkat INFO.
PatternLayout
Mengeluarkan log dalam format kustom. Anda dapat menentukan susunan dan format elemen, seperti timestamp, tingkat log, nama thread, nama kelas, nama metode, dan data log.
Appenders
Appender digunakan untuk menentukan tujuan log. Anda dapat mengonfigurasi beberapa appender untuk mengirim log ke tujuan yang berbeda. Tabel berikut menjelaskan appender umum.
Appender
Deskripsi
ConsoleAppender
Mengeluarkan log ke konsol.
FileAppender
Mengeluarkan log ke file.
DailyRollingFileAppender
Mengeluarkan log ke file baru setiap hari.
RollingFileAppender
Mengeluarkan log ke file dengan ukuran tertentu. Saat file mencapai ukuran yang ditentukan, sistem secara otomatis mengubah nama file dan menghasilkan file baru.
JDBCAppender
Menyimpan log ke database.
Loggers
Logger digunakan untuk menentukan titik masuk log dan menangkap informasi log. Setiap Logger diberi tingkat log berdasarkan tingkat kepentingan atau keparahannya. Log4j mendefinisikan tingkat log berikut: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, dan ALL (terdaftar dalam urutan prioritas menurun). Tingkat log dapat diwariskan. Kelas anak mencatat semua tingkat log dari kelas induk. Tabel berikut menjelaskan tingkat log.
Tingkat log
Deskripsi
OFF
Menonaktifkan semua log.
FATAL
Menunjukkan peristiwa kesalahan yang dapat menyebabkan aplikasi keluar.
ERROR
Menunjukkan peristiwa kesalahan yang tidak mempengaruhi jalannya sistem.
WARN
Menunjukkan potensi kesalahan.
INFO
Fokus pada jalannya aplikasi. Dalam banyak kasus, tingkat log ini digunakan dalam skenario di mana log dikelola secara kasar.
DEBUG
Membantu diagnosis. Dalam banyak kasus, tingkat log ini digunakan dalam skenario debugging aplikasi.
TRACE
Mengeluarkan variabel selama program berjalan dan menampilkan proses eksekusi. Tingkat log ini digunakan untuk melacak program.
ALL
Mencetak semua log.
Sebuah logger dapat sesuai dengan beberapa appender. Sebuah appender hanya dapat sesuai dengan satu layout.
Prasyarat
Proyek dan logstore telah dibuat. Untuk informasi lebih lanjut, lihat Buat sebuah proyek dan Buat sebuah logstore.
Jika Anda menggunakan Pengguna Resource Access Management (RAM) alih-alih akun Alibaba Cloud, Pengguna RAM harus memiliki izin untuk menulis data ke logstore tertentu. Untuk memberikan izin, pertama-tama buat kebijakan kustom, lalu berikan izin kepada Pengguna RAM.
Prosedur
Dalam topik ini, Java dan Log4j2 digunakan dalam contoh-contohnya. Anda juga dapat menggunakan Log4j untuk program dalam bahasa pemrograman lainnya, seperti C, C++, .NET, dan PL/SQL. Sintaksis dan metode penggunaan Log4j untuk program dalam bahasa pemrograman lainnya sama dengan sintaksis dan metode penggunaan Log4j dalam program Java.
Langkah 1: Tambahkan file konfigurasi Log4j2 ke proyek
Tambahkan dependensi ke proyek Maven.
<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, sistem mencari file konfigurasi di jalur classpath. Jika file konfigurasi tidak ada, Anda harus membuat file tersebut secara manual. Dalam contoh berikut, dua appender didefinisikan dalam file log4j2.xml. Appender tersebut digunakan untuk mengeluarkan log ke Simple Log Service dan file app.log, masing-masing. Tingkat log dari root logger didefinisikan sebagai ERROR, dan log dikeluarkan ke Simple Log Service. Tingkat log dari logger bernama com.example.demo.log didefinisikan sebagai WARN, dan log dikeluarkan ke file app.log. Untuk informasi lebih lanjut tentang cara mengonfigurasi Log4j2, lihat Log4j - Configuring Log4j 2 (apache.org).
!" -- status="WARN". Status internal Log4j2. Parameter ini tidak digunakan untuk menangkap dan melaporkan masalah potensial selama konfigurasi. --> <Configuration status="WARN"> <! -- Definisikan dua appender mulai --> <Appenders> <! -- Definisikan appender bernama Console untuk mencetak log ke output standar sistem. --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </Console> <! -- Definisikan appender bernama MyFile untuk mencetak log 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> <! -- Definisikan dua appender selesai --> <!-- Konfigurasikan logger mulai --> <Loggers> <! -- Definisikan logger bernama com.example.demo.log dan atur tingkat log menjadi TRACE. Logger com.example.demo.log merujuk pada appender MyFile. Logger mengeluarkan log yang tingkatnya adalah TRACE dan lebih tinggi ke appender MyFile. --> <Logger name="com.example.demo.log" level="warn"> <AppenderRef ref="MyFile" /> </Logger> <!-- Definisikan root logger dan atur tingkat log menjadi ERROR. Root logger merujuk pada appender Console. Logger mengeluarkan log yang tingkatnya adalah ERROR dan lebih tinggi ke konsol Simple Log Service. --> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> <!-- Konfigurasikan logger selesai --> </Configuration>Mulai mengeluarkan log.
Tulis kode uji untuk membaca appender yang telah didefinisikan dan mengeluarkan log. Contoh kode:
public void logExampleDemo() { // Dapatkan logger bernama com.example.demo.log. Logger logger = LogManager.getLogger("com.example.demo.log"); // Catat data log pada tingkat yang berbeda. logger.trace("tingkat trace"); logger.debug("tingkat debug"); logger.info("tingkat info"); logger.warn("tingkat warn"); logger.error("tingkat error"); logger.fatal("tingkat fatal"); }Contoh kode berikut memberikan contoh keluaran log:
2024-05-28 13:37:16:295 CST [http-nio-8080-exec-8] TRACE com.example.demo.log - tingkat trace 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] DEBUG com.example.demo.log - tingkat debug 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] INFO com.example.demo.log - tingkat info 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] WARN com.example.demo.log - tingkat warn 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] ERROR com.example.demo.log - tingkat error 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] FATAL com.example.demo.log - tingkat fatal
Langkah 2: Kumpulkan log Log4j ke Simple Log Service
Log4j2 appender adalah metode pengumpulan log bawaan dari Log4j2. Untuk aplikasi yang terintegrasi dengan Log4j2, Anda hanya perlu melakukan konfigurasi sederhana untuk memulai appender mengirim log secara real-time. Log4j2 appender cocok untuk skenario di mana sejumlah besar data log perlu diproses secara real-time.
Untuk menggunakan Logtail mengumpulkan log, Anda harus menginstal komponen Logtail di server. Komponen Logtail mendukung beberapa plugin pemrosesan.
Gunakan Log4j2 appender untuk mengumpulkan log Log4j
Tambahkan dependensi ke proyek Maven.
<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.
Dalam contoh berikut, file konfigurasi XML bernama
log4j2.xmldigunakan untuk mengonfigurasi appender dan logger terkait LogHub. Jika file konfigurasi tidak ada, buat file tersebut di direktori root proyek. Contoh kode:<Appenders> <Loghub name="Loghub" project="proyek Anda" logStore="logstore Anda" endpoint="endpoint proyek Anda" accessKeyId="ID AccessKey Anda" accessKeySecret="rahasia AccessKey Anda" totalSizeInBytes="104857600" maxBlockMs="0" ioThreadCount="8" batchSizeThresholdInBytes="524288" batchCountThreshold="4096" lingerMs="2000" retries="10" baseRetryBackoffMs="100" maxRetryBackoffMs="100" topic="topik Anda" source="sumber Anda" 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>Dalam contoh kode di atas, parameter project, logStore, endpoint, accessKeyId, dan accessKeySecret wajib. Parameter lainnya opsional, dan Anda dapat menggunakan nilai default. Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
project
Nama proyek Simple Log Service.
logStore
Nama penyimpanan log Simple Log Service.
endpoint
Endpoint publik Simple Log Service. Untuk informasi tentang cara mendapatkan endpoint, lihat Endpoints.
accessKeyId
ID AccessKey. Untuk informasi tentang cara mendapatkan ID AccessKey, lihat Buat pasangan AccessKey.
accessKeySecret
Rahasia AccessKey. Untuk informasi tentang cara mendapatkan rahasia AccessKey, lihat Buat pasangan AccessKey.
Uji demo.
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 log tingkat trace"); LOGGER.debug("log4j2 log tingkat debug"); LOGGER.info("log4j2 log tingkat info"); LOGGER.warn("log4j2 log tingkat warn"); LOGGER.error("log4j2 log tingkat error", new RuntimeException("Pengecualian Runtime")); Thread.sleep(1000 * 5); } }
Gunakan Logtail untuk mengumpulkan log Log4j
Saat mengonfigurasi Logtail, Anda harus menyediakan jalur file. Pastikan log aplikasi dapat ditulis ke file log sesuai harapan.
Simple Log Service menyediakan wizard konfigurasi untuk membantu Anda mengonfigurasi Logtail. Jika instance Elastic Compute Service (ECS) dan proyek Simple Log Service berada di bawah akun dan wilayah yang sama, lihat Instalasi otomatis Logtail untuk mengumpulkan log teks dari server. Jika tidak, lihat Instalasi manual Logtail untuk mengumpulkan log teks dari server.
Langkah 3: Lihat log
Masuk ke Konsol Simple Log Service.
Di bagian Proyek, klik yang ingin Anda kelola.

Pada tab , klik logstore yang ingin Anda kelola.

Periksa apakah log telah diunggah ke logstore. Panduan untuk pencarian dan analisis log di logstore. Kemudian, klik Consumption Preview untuk melihat log.

Cari dan analisis log
PentingSetelah log diunggah ke logstore, Anda harus membuat indeks untuk mencari dan menganalisis log. Untuk informasi lebih lanjut, lihat Buat indeks. Untuk informasi tentang cara membuat indeks, lihat Buat indeks.
Masukkan pernyataan pencarian di kotak pencarian, klik Last 15 Minutes, lalu tentukan rentang waktu pencarian.
Contoh kode berikut memberikan contoh log:
tingkat: ERROR lokasi: com.aliyun.openservices.log.log4j.example.Log4jAppenderExample.main(Log4jAppenderExample.java:16) pesan: log error pengecualian: java.lang.RuntimeException: xxx thread: main waktu: 2018-01-02T03:15+0000 log: 0 [main] ERROR com.aliyun.openservices.log.log4j.example.Log4jAppenderExample - log error __source__: xxx __topic__: yyyCari dan analisis log di halaman logstore.

Anda dapat memasukkan pernyataan pencarian untuk melihat, mencari, dan memfilter data log. Untuk informasi lebih lanjut, lihat Cari dan analisis log. Pernyataan berikut disediakan sebagai contoh.
Cari tiga lokasi tempat kesalahan paling banyak terjadi dalam satu jam terakhir.
tingkat: ERROR | select lokasi ,count(*) as jumlah GROUP BY lokasi ORDER BY jumlah DESC LIMIT 3Cari jumlah log di setiap tingkat log yang dihasilkan dalam 15 menit terakhir.
| select tingkat ,count(*) as jumlah GROUP BY tingkat ORDER BY jumlah DESC
Referensi
Untuk informasi tentang cara menggunakan Logtail untuk mengumpulkan log dari server, lihat Kumpulkan log teks dari server. Beberapa Plugin tersedia. Untuk informasi lebih lanjut, lihat Plugin asli: Pemrosesan Data (Mode Regex).
Jika halaman pratinjau kosong atau halaman kueri tidak menampilkan data saat Anda menggunakan Logtail untuk mengumpulkan log, Anda dapat memecahkan masalah tersebut dengan mengikuti petunjuk yang diberikan dalam topik Apa yang harus saya lakukan jika terjadi kesalahan saat saya menggunakan Logtail untuk mengumpulkan log?. Jika Anda menggunakan Logtail untuk mengumpulkan log, kesalahan mungkin terjadi. Sebagai contoh, ekspresi reguler mungkin gagal diproses, jalur file tidak valid mungkin ada, dan lalu lintas mungkin melebihi kemampuan pemrosesan shard. Anda dapat melihat kesalahan pengumpulan Logtail dengan mengikuti petunjuk yang diberikan dalam topik Bagaimana cara saya melihat kesalahan pengumpulan Logtail?. Untuk informasi tentang kesalahan umum dalam pengumpulan data, lihat Bagaimana cara saya memecahkan masalah kesalahan umum yang mungkin terjadi saat Simple Log Service mengumpulkan log?.
Untuk informasi tentang studi kasus dan pertanyaan yang sering diajukan (FAQ) tentang penggunaan Log4j2 appenders untuk mengumpulkan log Log4j, lihat Log4j2 Appender. Untuk informasi tentang studi kasus dan FAQ tentang penggunaan versi Log4j sebelum Log4j2 untuk mengumpulkan log Log4j, lihat Log4j Appender.
Saat menggunakan Log4j2 appender untuk mengumpulkan log Log4j, Anda harus mengonfigurasi sepasang AccessKey. Untuk informasi tentang cara mendapatkan sepasang AccessKey, lihat Buat sepasang AccessKey. Untuk informasi tentang cara mengonfigurasi Titik akhir yang disediakan oleh Simple Log Service, lihat Titik akhir.