Dalam tutorial ini, kita akan belajar mengenai Java Logging dan pelbagai komponennya dengan bantuan contoh.
Java membolehkan kita membuat dan menangkap mesej log dan fail melalui proses pembalakan.
Di Java, pembalakan memerlukan kerangka kerja dan API. Java mempunyai kerangka pembalakan terbina dalam java.util.logging
pakej.
Kami juga boleh menggunakan kerangka kerja pihak ketiga seperti Log4j, Logback dan banyak lagi untuk tujuan pembalakan.
Komponen Pembalakan Java
Gambar di bawah menunjukkan komponen teras dan aliran kawalan Java Logging API ( java.util.logging
).

1. Pembalak
The Logger
kelas menyediakan kaedah untuk pembalakan. Kita dapat membuat objek dari Logger
kelas dan memanggil kaedahnya untuk tujuan pembalakan.
Mari kita ambil contoh.
Logger logger = Logger.getLogger("newLoggerName");
The getLogger()
kaedah yang Logger
kelas digunakan untuk mencari atau mencipta yang baru Logger
. Argumen rentetan menentukan nama penebang.
Di sini, ini membuat Logger
objek baru atau mengembalikan yang ada Logger
dengan nama yang sama.
Ini adalah konvensyen untuk menentukan Logger
selepas kelas semasa menggunakan class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Catatan: Kaedah ini akan dilemparkan NullPointerException
jika nama lulus null
.
Masing Logger
- masing mempunyai tahap yang menentukan kepentingan mesej log. Terdapat 7 tahap log asas:
Tahap Log (mengikut urutan menurun) | Gunakan |
---|---|
SELAMAT | kegagalan serius |
AMARAN | mesej amaran, kemungkinan masalah |
INFO | maklumat jangka masa am |
KONFIG | maklumat konfigurasi |
BAIK | maklumat pembangun umum (mengesan mesej) |
SELESAI | maklumat pembangun terperinci (mengesan mesej) |
TERBAIK | maklumat pembangun yang sangat terperinci (mengesan mesej) |
MATI | matikan pembalakan untuk semua peringkat (tidak menangkap apa-apa) |
SEMUA | hidupkan log untuk semua peringkat |
Setiap tahap log mempunyai nilai integer yang menentukan keparahannya kecuali dua tahap log khas OFF
dan ALL
.
Mencatat mesej
Secara lalai, tiga tahap log teratas selalu dicatat. Untuk menetapkan tahap yang berbeza, kita dapat menggunakan kod berikut:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
Dalam contoh ini, hanya tahap FINE
dan tahap di atasnya yang ditetapkan untuk dicatat. Semua mesej log lain digugurkan.
Sekarang untuk log mesej, kami menggunakan log()
kaedah.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Terdapat kaedah ringkas untuk log pada tahap yang diinginkan.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Semua permintaan log yang telah melepasi tahap log yang ditetapkan kemudian diteruskan ke LogRecord .
Catatan: Sekiranya tahap penebang ditetapkan null
, tahapnya diwarisi dari induknya dan seterusnya ke atas pokok.
2. Penapis
Penapis (jika ada) menentukan sama ada LogRecord harus diteruskan atau tidak. Seperti namanya, ia menyaring mesej log mengikut kriteria tertentu.
A LogRecord hanya lulus dari logger untuk pengendali log dan dari pengendali log untuk sistem luaran jika ia melepasi kriteria yang ditetapkan.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Pengendali (Appenders)
Pengendali log atau pelengkap menerima LogRecord dan mengeksportnya ke pelbagai sasaran.
Java SE menyediakan 5 pengendali terbina dalam:
Penangan | Gunakan |
---|---|
StreamHandler | menulis kepada seorang OutputStream |
ConsoleHandler | menulis untuk menghiburkan |
FileHandler | menulis ke fail |
SocketHandler | menulis ke port TCP jauh |
MemoryHandler | menulis ke ingatan |
Pengendali boleh meneruskan LogRecord ke penapis untuk menentukan lagi apakah ia dapat diteruskan ke sistem luaran atau tidak.
Untuk menambahkan pengendali baru, kami menggunakan kod berikut:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Untuk membuang pengendali, kami menggunakan kod berikut:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Pembalak boleh mempunyai banyak pengendali. Untuk mendapatkan semua pengendali, kami menggunakan kod berikut:
Handler() handlers = logger.getHandlers();
4. Pembentuk format
Pengendali juga dapat menggunakan Formatter untuk memformat objek LogRecord menjadi rentetan sebelum mengeksportnya ke sistem luaran.
Java SE mempunyai dua Formatters terbina dalam :
Pembentuk borang | Gunakan |
---|---|
SimpleFormatter | format LogRecord ke rentetan |
XMLFormatter | format LogRecord ke bentuk XML |
Kita boleh menggunakan kod berikut untuk memformat pengendali:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
Pengurus Log
The LogManager objek menjejaki maklumat pembalakan global. Ia membaca dan mengekalkan konfigurasi pembalakan dan contoh pembalak.
Pengurus log adalah singleton, yang bermaksud bahawa hanya satu contohnya yang dibuat.
Untuk mendapatkan contoh pengurus log, kami menggunakan kod berikut:
LogManager manager = new LogManager();
Kelebihan Pembalakan
Berikut adalah beberapa kelebihan log masuk di Java.
- membantu dalam memantau aliran program
- membantu dalam menangkap kesilapan yang mungkin berlaku
- memberikan sokongan untuk diagnosis masalah dan penyahpepijatan