Java memasukkan pustaka API logging sebagai bagian dari kerangka kerjanya dari JDK 1.4. Hari ini, ini adalah dukungan bawaan dari Java. Namun, perpustakaan ini dapat disesuaikan dan diperluas dalam arti bahwa kita dapat menggunakan satu atau lebih solusi logging alternatif yang disediakan oleh perpustakaan pihak ketiga. Meskipun solusi pihak ketiga ini memiliki pendekatan yang berbeda untuk membuat data log, mereka pada akhirnya berbagi tujuan yang sama untuk mencatat pesan dari waktu proses aplikasi. Artikel ini mengeksplorasi dasar-dasar logging dan menunjukkan bagaimana hal itu dapat digunakan dalam program Java.
Pencatatan Java
Sebuah log biasanya berarti pemeliharaan semacam catatan. Dari perspektif pemrograman, ini adalah proses menulis pesan dalam file log selama eksekusi program. Log pesan yang bertahan dirujuk, biasanya oleh programmer, untuk mengumpulkan informasi statistik runtime tertentu yang, ketika dianalisis, dapat mengungkapkan situasi yang tidak terduga. Sebenarnya, ada banyak alasan berbeda mengapa logging digunakan dan ini hanyalah salah satunya. Menurut dokumentasi Java API, ada empat kegunaan utama logging:
- Untuk diagnosis masalah oleh pengguna akhir dan administrator sistem.
- Lebih mudah bagi teknisi layanan lapangan untuk mendiagnosis masalah dari pesan yang dicatat dan memperbaikinya dengan cepat.
- Organisasi pengembangan dapat melacak eksekusi internal subsistem tertentu dan menganalisisnya.
- Pengembang dapat men-debug aplikasi yang sedang dikembangkan dengan mendapatkan wawasan singkat tentang masalah mendasar dari pesan yang dicatat dalam log.
Pencatatan Java API dirancang dengan cara yang murah dalam arti dapat dibiarkan sebagai residu bahkan dalam aplikasi produksi. Ini tidak membuat banyak overhead untuk efisiensi eksekusi program. API menyediakan mekanisme untuk mengubah produksi pesan log secara dinamis sehingga dampak logging dapat diminimalkan selama operasi yang membutuhkan efisiensi maksimum. API terdiri dari sejumlah kelas dan antarmuka yang dapat dikustomisasi dengan memperluasnya. Seluruh API logging dikemas dalam java.util.logging . Kelas dan antarmuka dalam paket ini menyediakan fasilitas logging inti di Java.
Level Logging
Urgensi logging dalam program Java dapat dikategorikan ke dalam beberapa tingkatan. Dengan naik turunnya level, kita bisa menambah atau mengurangi biaya logging dalam sebuah aplikasi produksi. Ini adalah cara kami mengontrol efisiensi eksekusi aplikasi di mana perlu untuk mencatat satu atau lebih kejadiannya. Ini dicapai melalui kelas yang disebut Level , yang mendefinisikan pentingnya logging. Level log diurutkan dan ditentukan oleh statis konstanta bilangan bulat, seperti:
- Level.ALL: Semua pesan dicatat, terlepas dari kepentingannya
- Level.OFF: Pencatatan dinonaktifkan
- Level.PARAH: Menunjukkan kegagalan serius; harus login
- Level.PERINGATAN: Menunjukkan pesan peringatan
- Level.INFO: Pesan informasi runtime
- Level.CONFIG: Pesan konfigurasi statis
- Level.FINE: Melacak pesan
- Level.FINER: Pesan pelacakan detail
- Level.FINEST: Pesan penelusuran yang sangat mendetail
Komponen Logging
Kami membutuhkan Logger contoh untuk melakukan segala jenis logging di Jawa. Instance ini bertanggung jawab untuk memasukkan data ke dalam LogRecord . Rekam Log instance digunakan untuk meneruskan permintaan logging antara kerangka kerja logging dan penangan log individual. Java SE menyediakan lima tipe pengendali bawaan:StreamHandler , ConsoleHandler , FileHandler , SocketHandler , dan MemoryHandler . Namun, seseorang dapat membuat penangan baru atau memperluas salah satunya sebagai penyesuaian. Penangan menentukan apa yang harus dilakukan dengan catatan log; misalnya, dapat disimpan di repositori lokal atau meneruskannya ke server melalui jaringan. Java SE juga menyertakan dua formatter standar:SimpleFormatter dan XMLFormatter . Pemformat ini digunakan untuk memformat LogRecord menjadi format yang dapat dibaca manusia dan format XML standar.
Ada LogManager class yang melacak informasi logging global, seperti namespace hierarkis bernama Loggers dan satu set properti kontrol logging dari file konfigurasi. Ini penting untuk login di Java dan cukup banyak mengontrol apa yang harus login, di mana harus login, termasuk detail inisialisasi lainnya, dan sebagainya.
Contoh Pencatatan Sederhana
Membuat Logger objek sangat sederhana. Berikut adalah kode yang sangat sederhana untuk mengilustrasikannya.
import java.util.logging.Logger; public class App { private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) { logger.info("This is a log message !!!"); logger.info("The name of the logger is " + logger.getName() + " nwhich is same as class name: " + App.class.getName()); } }
Penebang objek biasanya diberi nama menggunakan String nilai ruang nama yang dipisahkan titik secara hierarkis. Dalam kasus sebelumnya, itu sama dengan nama kelas. Namun, nama dapat berupa nilai String yang berubah-ubah, tetapi biasanya nama didasarkan pada nama paket atau nama kelas dari komponen yang dicatat. Logger "anonim" juga dapat dibuat yang tidak akan disimpan di Logger ruang nama.
Logging ke File Eksternal Menggunakan Format XML
Dalam kode berikut, pesan log diarahkan ke file menggunakan FileHandler .
Catatan: File akan dibuat di direktori proyek. |
FileHandler dapat menulis ke file tertentu, atau dapat menulis ke kumpulan file yang berputar. Kumpulan file yang berputar berarti bahwa file lama diberi nama dengan menambahkan 0,1,2 dan seterusnya ke dalam nama file dasar. XMLFormatter adalah format default yang digunakan oleh FileHandler .
import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; public class App { private static FileHandler fileHandler; private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) throws IOException { fileHandler = new FileHandler(App.class.getName() + ".log"); logger.setLevel(Level.ALL); logger.addHandler(fileHandler); logger.info("Log message redirected to a file"); logger.info("The name of the logger is " + logger.getName() + " nwhich is same as class name: " + App.class.getName()); } }
Masuk ke File Eksternal Menggunakan Pemformatan Kustom
Kami akan sedikit mengubah kode berikut untuk menyesuaikan format pesan. Ini mengubah cara pesan ditulis dalam file eksternal.
Catatan: Amati isi file log tentang bagaimana pemformatan telah berubah. |
import java.io.IOException; import java.util.logging.*; public class App { private static FileHandler fileHandler; private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) throws IOException { fileHandler = new FileHandler(App.class.getName() + ".log"); logger.setLevel(Level.ALL); fileHandler.setFormatter(newCustomFormatter()); logger.addHandler(fileHandler); logger.fine("Log message redirected to a file"); logger.finer("The name of the logger is " + logger.getName()); loggerfinest("This is same as class name: " + App.class.getName()); } private static class CustomFormatter extends Formatter { private static final String format = "[%1$tF %1$tT] [%2$-4s] %3$s %n"; public String format(LogRecord record) { returnString.format(format, record.getMillis(), record.getLevel().getLocalizedName(), record.getMessage()); } } }
Itu saja. Lakukan percobaan dengan Java logging dan coba banyak kemungkinan lainnya. Konsultasikan dokumen Java API jika diperlukan.
Kerangka Logging Lainnya di Java
Terkadang, lebih mudah untuk menggunakan kerangka kerja logging pihak ketiga, dan ada beberapa yang populer untuk dipilih. Misalnya, API logging yang disediakan oleh SLF4J menggunakan pola fasad sederhana adalah lapisan abstraksi yang memungkinkan aplikasi dipisahkan dari kerangka loggingnya. Log4j secara sintaksis mirip dengan logging Java bawaan. Ini memiliki konfigurasi default untuk menampilkan semua pesan log ke konsol. Logback adalah penerus Log4j dan merupakan perpanjangan dari pendahulunya. tinyLog adalah kerangka kerja logging ringan yang dapat digunakan dengan Java dan Android.
Kesimpulan
Proses logging dirancang untuk menjadi sederhana dan efisien dalam memberikan apa yang seharusnya dilakukan. Dimungkinkan untuk memulai dengan cepat dengan Logging API di Java. Desainnya dapat diperluas dan dapat disesuaikan sesuai dengan kebutuhan akhir pengembang. Artikel ini adalah sekilas tentang dasar-dasar logging Java. Banyak detail rumit dihilangkan untuk kesederhanaan. Pelajari Dokumentasi Java API dan dokumen lain yang sesuai untuk detail lebih lanjut tentang ini.
Referensi
- Ikhtisar Pembuatan Log Java
- Dokumentasi Java API