Java Logging

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.loggingpaketnya.

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).

Java Logging

1. Logger

The Loggerkelas menyediakan metode untuk logging. Kita dapat membuat instance objek dari Loggerkelas dan memanggil metodenya untuk tujuan logging.

Mari kita ambil contoh.

 Logger logger = Logger.getLogger("newLoggerName"); 

The getLogger()metode dari Loggerkelas digunakan untuk menemukan atau membuat yang baru Logger. Argumen string mendefinisikan nama logger.

Di sini, ini membuat Loggerobjek baru atau mengembalikan yang sudah ada Loggerdengan nama yang sama.

Ini adalah konvensi untuk mendefinisikan Loggersetelah kelas saat ini menggunakan class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Catatan: Metode ini akan membuang NullPointerExceptionjika nama yang diteruskan adalah null.

Masing-masing Loggermemiliki 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 OFFdan 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 FINEdan 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

Artikel yang menarik...