4.1 Senarai peringkat pembalakan
Anda menulis program anda, memuat naiknya ke pelayan, dan kemudian anda segera mula mempunyai soalan:
- Bagaimana untuk memastikan bahawa
debug()
kaedah itu tidak berfungsi semasa bekerja diproduction
? - Terdapat terlalu banyak maklumat dalam log, adakah anda ingin meninggalkan mesej ralat sahaja?
- Bagaimana untuk melihat log terperinci untuk satu bahagian aplikasi?
Sudah tentu, pencipta log menghadapi perkara yang sama beberapa dekad yang lalu. Saya tidak akan memberitahu anda bagaimana masalah ini diselesaikan dalam bahasa C, tetapi dalam bahasa Java ia diselesaikan dengan sangat indah.
Log menapis data sebelum menulis maklumat ke . Anda boleh mengurangkan / meningkatkan perincian log dengan cepat dengan menetapkan tahap pengelogan. Tahap ini diterangkan dalam jadual di bawah:
Tahap | Catatan | |
---|---|---|
1 | SEMUA | Log semua mesej |
2 | JEJAK | Mesej kecil semasa menyahpepijat |
3 | DEBUG | Mesej penting untuk nyahpepijat |
4 | INFO | Mesej ringkas |
5 | AMARAN | Tulis hanya maut, kesilapan dan amaran |
6 | RALAT | Tulis hanya kesilapan dan kesilapan yang membawa maut |
7 | MAUT | Tulis hanya kesilapan yang membawa maut |
8 | DIMATIKAN | Jangan tulis mesej pada log |
Tahap ini digunakan semasa menapis mesej. Jika anda menetapkan tahap pengelogan kepada WARN
, maka semua mesej yang kurang penting daripada WARN
akan dibuang: TRACE
, DEBUG
, INFO
. Jika anda menetapkan tahap penapisan kepada FATAL
, maka genap ERROR
.
Terdapat dua lagi tahap keterukan yang digunakan dalam penapisan - ini OFF
(buang semua mesej) dan ALL
- tulis semua mesej (buang apa-apa).
4.2 Contoh persediaan log
Mari lihat contoh persediaan log yang mudah. Untuk melakukan ini, kami memerlukan fail log4j.properties, yang boleh diletakkan dalam folder sumber. Mari tambahkan kandungan berikut padanya:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Di sini dalam baris pertama kami menetapkan tahap pembalakan - WARN
. Dan ini bermakna bahawa mesej yang ditulis kepada pembalak dengan status DEBUG
akan INFO
diabaikan.
- Nyatakan jenis penambah yang akan kami gunakan -
ConsoleAppender
- Nyatakan tempat kami akan menulis log -
System.out
- Kami menetapkan kelas yang akan mengawal format rakaman -
PatternLayout
- Tetapkan format rakaman untuk semua mesej - tarikh dan masa
4.3 Kesilapan pembalakan popular
Dan satu lagi perkara penting - kesilapan popular dalam pembalakan. Tidak begitu banyak pilihan untuk melakukan sesuatu, tetapi beberapa kesilapan biasa boleh dikenal pasti:
- Terlalu banyak pembalakan . Anda tidak sepatutnya log setiap langkah, yang secara teorinya boleh menjadi penting. Terdapat peraturan: log boleh memuatkan prestasi tidak lebih daripada 10% . Jika tidak, masalah prestasi akan berlaku.
- Log semua data ke dalam satu fail . Ini akan menyebabkan ia menjadi sangat sukar untuk membaca/menulis pada satu ketika, apatah lagi terdapat had saiz fail pada sistem tertentu.
- Menggunakan tahap pengelogan yang salah . Setiap peringkat pembalakan mempunyai sempadan yang jelas, dan mereka harus dihormati. Jika sempadannya kabur, anda boleh bersetuju pada tahap mana yang hendak digunakan.