Dalam tutorial ini, kita akan belajar tentang Java Logging dan berbagai komponennya dengan bantuan contoh.
Java memungkinkan kita untuk membuat dan menangkap pesan log dan file melalui proses logging.
Di Java, logging membutuhkan kerangka kerja dan API. Java memiliki kerangka kerja logging built-in dalam java.util.logging
paketnya.
Kami juga dapat menggunakan kerangka kerja pihak ketiga seperti Log4j, Logback, dan banyak lagi untuk tujuan pencatatan.
Komponen Java Logging
Gambar di bawah ini mewakili komponen inti dan aliran kontrol Java Logging API ( java.util.logging
).

1. Logger
The Logger
kelas menyediakan metode untuk logging. Kita dapat membuat instance objek dari Logger
kelas dan memanggil metodenya untuk tujuan logging.
Mari kita ambil contoh.
Logger logger = Logger.getLogger("newLoggerName");
The getLogger()
metode dari Logger
kelas digunakan untuk menemukan atau membuat yang baru Logger
. Argumen string mendefinisikan nama logger.
Di sini, ini membuat Logger
objek baru atau mengembalikan yang sudah ada Logger
dengan nama yang sama.
Ini adalah konvensi untuk mendefinisikan Logger
setelah kelas saat ini menggunakan class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Catatan: Metode ini akan membuang NullPointerException
jika nama yang diteruskan adalah null
.
Masing-masing Logger
memiliki level yang menentukan pentingnya pesan log. Ada 7 level log dasar:
Level Log (dalam urutan menurun) | Menggunakan |
---|---|
BERAT | kegagalan serius |
PERINGATAN | pesan peringatan, masalah potensial |
INFO | informasi runtime umum |
KONFIGASI | informasi konfigurasi |
BAIK | informasi pengembang umum (melacak pesan) |
LEBIH BAIK | informasi pengembang terperinci (melacak pesan) |
TERBAIK | informasi pengembang yang sangat rinci (melacak pesan) |
MATI | matikan logging untuk semua level (tidak menangkap apapun) |
SEMUA | aktifkan logging untuk semua level (tangkap semuanya) |
Setiap tingkat log memiliki nilai integer yang menentukan tingkat keparahannya kecuali untuk dua tingkat log khusus OFF
dan ALL
.
Mencatat pesan
Secara default, tiga tingkat log teratas selalu dicatat. Untuk mengatur level yang berbeda, kita dapat menggunakan kode berikut:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
Dalam contoh ini, hanya level FINE
dan level di atasnya yang disetel untuk dicatat. Semua pesan log lainnya dibuang.
Sekarang untuk mencatat pesan, kami menggunakan log()
metode.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Ada metode singkat untuk mencatat pada tingkat yang diinginkan.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Semua permintaan log yang telah melewati tingkat log yang ditetapkan kemudian diteruskan ke LogRecord .
Catatan: Jika level logger disetel ke null
, levelnya diwarisi dari induknya dan seterusnya di atas pohon.
2. Filter
Filter (jika ada) menentukan apakah LogRecord harus diteruskan atau tidak. Seperti namanya, ini memfilter pesan log sesuai dengan kriteria tertentu.
Sebuah LogRecord hanya lulus dari logger untuk penangan log dan dari log handler untuk sistem eksternal jika melewati kriteria tertentu.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Penangan (Appenders)
Penangan log atau appenders menerima LogRecord dan mengekspornya ke berbagai target.
Java SE menyediakan 5 penangan bawaan:
Penangan | Menggunakan |
---|---|
StreamHandler | menulis ke sebuah OutputStream |
ConsoleHandler | menulis untuk menghibur |
FileHandler | menulis ke file |
SocketHandler | menulis ke port TCP jarak jauh |
MemoryHandler | menulis ke memori |
Seorang penangan dapat meneruskan LogRecord ke filter untuk kembali menentukan apakah dapat diteruskan ke sistem eksternal atau tidak.
Untuk menambahkan handler baru, kami menggunakan kode berikut:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Untuk menghapus penangan, kami menggunakan kode berikut:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Seorang logger dapat memiliki banyak penangan. Untuk mendapatkan semua penangan, kami menggunakan kode berikut:
Handler() handlers = logger.getHandlers();
4. Pemformat
Penangan juga dapat menggunakan Formatter untuk memformat objek LogRecord menjadi string sebelum mengekspornya ke sistem eksternal.
Java SE memiliki dua Format bawaan :
Format | Menggunakan |
---|---|
SimpleFormatter | memformat LogRecord menjadi string |
XMLFormatter | memformat LogRecord ke bentuk XML |
Kita dapat menggunakan kode berikut untuk memformat penangan:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
The LogManager objek melacak informasi logging global. Itu membaca dan memelihara konfigurasi logging dan contoh logger.
Manajer log adalah singleton, yang berarti bahwa hanya satu instance yang dibuat.
Untuk mendapatkan instance manajer log, kami menggunakan kode berikut:
LogManager manager = new LogManager();
Keuntungan dari Logging
Berikut ini beberapa keuntungan logging di Java.
- membantu dalam memantau aliran program
- membantu dalam menangkap kesalahan yang mungkin terjadi
- memberikan dukungan untuk diagnosis masalah dan debugging