Menguasai Logging Java: Dasar-dasar & Praktik Terbaik
Dasar-dasar Logging Java Dalam tutorial ini, kita akan mempelajari tentang Logging Java dan berbagai komponennya dengan bantuan contoh.
Java memungkinkan kita untuk membuat dan menangkap pesan log dan file melalui proses logging.
Di Java, logging memerlukan framework dan API. Java memiliki framework logging bawaan di paket java.util.logging.
Kita juga dapat menggunakan framework pihak ketiga seperti Log4j , Logback , dan banyak lagi untuk tujuan logging.
Komponen Logging Java Gambar di bawah mewakili komponen inti dan aliran kontrol API Logging Java (java.util.logging).
1. Logger Kelas Logger menyediakan metode untuk logging. Kita dapat membuat objek dari kelas Logger dan memanggil metodenya untuk tujuan logging.
Mari kita ambil contoh.
Logger logger = Logger.getLogger("newLoggerName"); Metode getLogger() dari kelas Logger digunakan untuk menemukan atau membuat Logger baru. Argumen string menentukan nama logger.
Di sini, ini membuat objek Logger baru atau mengembalikan Logger yang sudah ada dengan nama yang sama.
Adalah konvensi untuk mendefinisikan Logger setelah kelas saat ini menggunakan class.getName().
Logger logger = Logger.getLogger(MyClass.class.getName()); Catatan: Metode ini akan melempar NullPointerException jika nama yang diteruskan adalah null.
Setiap Logger memiliki sebuah level yang menentukan kepentingan pesan log. Ada 7 level log dasar:
Log Level (urutan menurun) Penggunaan SEVERE gagal serius WARNING pesan peringatan, masalah potensial INFO informasi runtime umum CONFIG informasi konfigurasi FINE informasi pengembang umum (pesan tracing) FINER informasi pengembang detail (pesan tracing) FINEST informasi pengembang sangat detail (pesan tracing) OFF matikan logging untuk semua level (tangkap tidak ada) ALL nyalakan logging untuk semua level (tangkap semua)
Setiap level log memiliki nilai integer yang menentukan tingkat kepentingan kecuali untuk dua level khusus OFF dan ALL.
Mencatat Pesan Secara default, tiga level log teratas selalu dicatat. Untuk mengatur level yang berbeda, kita dapat menggunakan kode berikut:
logger.setLevel(Level.LogLevel); // contoh logger.setLevel(Level.FINE); Dalam contoh ini, hanya level FINE dan level di atasnya yang diatur untuk dicatat. Semua pesan log lainnya dibuang.
Sekarang untuk mencatat pesan, kita menggunakan metode log().
logger.log(Level.LogLevel, "pesan log"); // contoh logger.log(Level.INFO, "Ini adalah pesan log level INFO"); Ada metode singkat untuk mencatat pada level yang diinginkan.
logger.info("Ini adalah pesan log level INFO"); logger.warning("Ini adalah pesan log level WARNING"); Semua permintaan log yang telah lulus level log yang ditetapkan kemudian diteruskan ke LogRecord .
Catatan: Jika level logger diatur ke null, levelnya diwarisi dari induknya dan seterusnya ke atas pohon.
2. Filter Filter (jika ada) menentukan apakah LogRecord harus diteruskan atau tidak. Seperti yang namanya tunjukkan, ia menyaring pesan log berdasarkan kriteria tertentu.
Sebuah LogRecord hanya diteruskan dari logger ke log handler dan dari log handler ke sistem eksternal jika lolos kriteria yang ditentukan.
// atur filter logger.setFilter(filter); // ambil filter Filter filter = logger.getFilter(); 3. Handler (Appenders) Log handler atau appenders menerima LogRecord dan mengekspor ke berbagai target.
Java SE menyediakan 5 handler bawaan:
Handlers Penggunaan StreamHandlermenulis ke OutputStream ConsoleHandlermenulis ke console FileHandlermenulis ke file SocketHandlermenulis ke port TCP jarak jauh MemoryHandlermenulis ke memori
Sebuah handler dapat melewatkan LogRecord ke filter untuk lagi menentukan apakah dapat diteruskan ke sistem eksternal atau tidak.
Untuk menambahkan handler baru, kita menggunakan kode berikut:
logger.addHandler(handler); // contoh Handler handler = new ConsoleHandler(); logger.addHandler(handler); Untuk menghapus handler, kita menggunakan kode berikut:
logger.removeHandler(handler); // contoh Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); Sebuah logger dapat memiliki beberapa handler. Untuk mendapatkan semua handler, kita menggunakan kode berikut:
Handler[] handlers = logger.getHandlers(); Sebuah handler juga dapat menggunakan Formatter untuk memformat objek LogRecord menjadi string sebelum mengekspor ke sistem eksternal.
Java SE memiliki dua Formatter bawaan:
Formatters Penggunaan SimpleFormattermemformat LogRecord ke string XMLFormattermemformat LogRecord ke bentuk XML
Kita dapat menggunakan kode berikut untuk memformat handler:
// format ke bentuk string handler.setFormatter(new SimpleFormatter()); // format ke bentuk XML handler.setFormatter(new XMLFormatter()); LogManager Objek LogManager melacak informasi logging global. Ini membaca dan memelihara konfigurasi logging dan instance logger.
Log manager adalah singleton, yang berarti hanya satu instance yang diinstantiasi.
Untuk mendapatkan instance log manager, kita menggunakan kode berikut:
LogManager manager = LogManager.getLogManager(); Keuntungan Logging Berikut adalah beberapa keuntungan logging di Java.
membantu memantau aliran program membantu menangkap kesalahan yang mungkin terjadi menyediakan dukungan untuk diagnosis dan debugging masalah