Komposisi komponen Log4j
Log4j terdiri dari tiga komponen penting:
1. Prioritas informasi log (Logger)
2. Tujuan keluaran informasi log (Appender)
3. Format keluaran (Tata Letak) informasi log.
ringkasan:
Prioritas informasi log dari tinggi ke rendah mencakup ERROR, WARN, INFO, dan DEBUG, yang masing-masing digunakan untuk menentukan pentingnya informasi log ini;
Tujuan keluaran informasi log menentukan apakah log akan dicetak ke konsol atau file;
Format output mengontrol konten tampilan informasi log.
Pengenalan log4j
Log4j adalah proyek sumber terbuka Apache. Dengan menggunakan Log4j, kita dapat mengontrol tujuan transmisi informasi log ke konsol, file, komponen GUI, dan bahkan server soket, perekam peristiwa NT, daemon UNIX Syslog, dll.; format keluaran setiap log. Dengan menentukan tingkat setiap informasi log, kita dapat mengontrol proses pembuatan log secara lebih detail. log4j-- log untuk java (log java).
Alamat unduhan Log4j: http://logging.apache.org/log4j/2.x/download.html
Format file konfigurasi Log4j
Log4j mendukung dua format file konfigurasi:
1. File berformat XML
2. File dalam format properti
Anda juga tidak dapat menggunakan file konfigurasi sama sekali, tetapi mengkonfigurasi lingkungan Log4j dalam kode. Namun, menggunakan file konfigurasi akan membuat aplikasi Anda lebih fleksibel.
File konfigurasi definisi Log4j
1. Konfigurasikan Logger root
Sintaksnya adalah:
Deskripsi parameter:
level adalah prioritas logging, yang dibagi menjadi OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL atau level yang Anda tentukan.
Off : level tertinggi, digunakan untuk mematikan semua logging
Fatal: Menunjukkan bahwa setiap kejadian kesalahan fatal akan menyebabkan aplikasi keluar.
Error : menunjukkan bahwa meskipun terjadi peristiwa error, namun tetap tidak mempengaruhi kelangsungan pengoperasian sistem.
Peringatkan: Menunjukkan bahwa situasi kesalahan potensial akan terjadi
Info: Umumnya digunakan pada tingkat kasar, menekankan keseluruhan proses aplikasi yang berjalan
Debug: Secara umum dan pada tingkat yang kasar, menekankan keseluruhan proses aplikasi yang berjalan.
Semua: Level terendah, digunakan untuk mengaktifkan semua logging.
Log4j merekomendasikan hanya menggunakan empat level. Prioritas dari tinggi ke rendah adalah ERROR, WARN, INFO, dan DEBUG. Melalui level yang ditentukan di sini, Anda dapat mengontrol aktif dan nonaktif level informasi log yang sesuai dalam aplikasi.
appenderName merujuk ke tempat informasi log dikeluarkan, dan beberapa tujuan keluaran dapat ditentukan secara bersamaan.
2. Konfigurasikan Appender tujuan keluaran informasi log
Sintaksnya adalah:
log4j.appender.appenderName.option1 = nilai1
...
log4j.appender.appenderName.option = nilaiN
org.apache.log4j.ConsoleAppender(Konsol)
org.apache.log4j.FileAppender(File)
org.apache.log4j.DailyRollingFileAppender (menghasilkan file log setiap hari)
org.apache.log4j.RollingFileAppender (menghasilkan file baru ketika ukuran file mencapai ukuran yang ditentukan)
org.apache.log4j.WriterAppender (mengirimkan informasi log dalam format streaming ke tempat tertentu)
3. Konfigurasikan format informasi log
Sintaksnya adalah:
log4j.appender.appenderName.layout.option1 = nilai1 …
log4j.appender.appenderName.layout.option = nilaiN
org.apache.log4j.HTMLLayout (tata letak dalam format tabel HTML),
org.apache.log4j.PatternLayout (dapat secara fleksibel menentukan pola tata letak),
org.apache.log4j.SimpleLayout (berisi level dan string informasi dari informasi log),
org.apache.log4j.TTCCLayout (berisi informasi waktu pembuatan log, thread, kategori, dll.)
Log4J menggunakan format pencetakan yang mirip dengan fungsi printf dalam bahasa C untuk memformat informasi log.
%mKeluarkan pesan yang ditentukan dalam kode
%p prioritas keluaran yaitu DEBUG, INFO, WARN, ERROR, FATAL
%r menampilkan jumlah milidetik yang diperlukan dari awal aplikasi hingga keluaran informasi log.
%c menampilkan kategori tempatnya, biasanya nama lengkap kelasnya.
%tKeluarkan nama thread yang menghasilkan peristiwa log
%n mengeluarkan karakter carriage return dan line feed, yaitu "rn" pada platform Windows dan "n" pada platform Unix.
%d menampilkan tanggal atau waktu titik waktu log. Format defaultnya adalah ISO8601. Anda juga dapat menentukan format setelahnya, seperti: %d{yyyMMMddHH:mm:ss,SSS}. 2002 22:10 :28,921
%l Menampilkan lokasi terjadinya peristiwa log, termasuk nama kategori, thread tempat terjadinya, dan nomor baris dalam kode. Contoh: Testlog4.main(TestLog4.java:10)
%x: Menghasilkan NDC (lingkungan diagnostik bersarang) yang terkait dengan thread saat ini, terutama digunakan dalam aplikasi multiklien dan multi-thread seperti javaservlets.
%%: Menampilkan karakter "%" %F: Menampilkan nama file tempat pesan log dibuat
%L: Nomor baris dalam kode keluaran
%m: Menampilkan pesan yang ditentukan dalam kode dan informasi log spesifik yang dihasilkan
%n: Menghasilkan karakter carriage return dan line feed, yaitu "/r/n" pada platform Windows dan "/n" pada platform Unix. Saat mengeluarkan informasi log, Anda dapat menambahkan pengubah antara % dan karakter mode mengontrol lebar minimum dan lebar maksimum. Lebar, dan perataan teks.
menyukai:
1)%20c: Tentukan nama kategori keluaran. Lebar minimum adalah 20. Jika nama kategori kurang dari 20, maka secara default akan rata kanan.
2)%-20c: Tentukan nama kategori keluaran. Lebar minimum adalah 20. Jika nama kategori kurang dari 20, tanda "-" menentukan rata kiri.
3)%.30c: Tentukan nama kategori keluaran. Lebar maksimum adalah 30. Jika nama kategori lebih besar dari 30, karakter tambahan di sebelah kiri akan terpotong, tetapi jika kurang dari 30, akan ada tidak boleh ada spasi.
4)%20.30c: Jika nama kategori kurang dari 20 karakter, isi spasi dan rata kanan. Jika nama lebih dari 30 karakter, potong karakter dari sisi kiri.
Metode konfigurasi log4j.xml
<?xml versi="1.0" pengkodean="UTF-8"?>
<!DOCTYPE log4j:SISTEM konfigurasi "log4j.dtd">
<log4j:konfigurasi xmlns:log4j="http://jakarta.apache.org/log4j/">
<nama tambahan="tambahan1"
>
<param nama="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param nama="MaxBackupIndex" nilai="5" />
<tata letak>
</tata letak>
</tambahan>
<akar>
<tingkat nilai="debug" />
<appender-ref ref="appender1" />
</akar>
</log4j:konfigurasi>
Sebelum menggunakan Log4j dalam program, impor terlebih dahulu commons-logging.jar dan logging-log4j-1.2.9.jar ke dalam classpath, dan letakkan log4j.properties di direktori root src. Untuk menggunakan log4j di kelas, pertama-tama deklarasikan variabel statis Loggerlogger=Logger.getLog("classname"). Ini dapat digunakan sekarang.
Penggunaannya adalah sebagai berikut: logger.debug("debugmessage") atau logger.info("infomessage").
1. Dapatkan logger
Dengan menggunakan Log4j, langkah pertama adalah mendapatkan logger, yang akan bertanggung jawab untuk mengontrol informasi log.
Sintaksnya adalah:
publicstaticLoggergetLogger(Nama string)
Mendapatkan logger dengan nama yang ditentukan dan, jika perlu, membuat logger baru untuk nama tersebut. Nama umumnya mengambil nama kelas ini, seperti:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Baca file konfigurasi
Setelah mendapatkan logger, langkah kedua adalah mengkonfigurasi lingkungan Log4j. Sintaksnya adalah:
BasicConfigurator.configure(): Secara otomatis dan cepat menggunakan lingkungan Log4j default.
PropertyConfigurator.configure(StringconfigFilename): Membaca file konfigurasi yang ditulis menggunakan file properti Java.
DOMConfigurator.configure(Stringfilename): Membaca file konfigurasi dalam bentuk XML.
3. Masukkan informasi catatan (informasi log yang diformat)
Ketika dua langkah penting di atas selesai, Anda dapat dengan mudah menggunakan pernyataan logging dengan prioritas berbeda untuk disisipkan di mana pun Anda ingin mencatat. Sintaksnya adalah sebagai berikut:
Logger.debug(Pesan Objek);
Logger.info(Pesan Objek);
Logger.warn(Pesan Objek);
Logger.error(Pesan Objek);
Demonstrasi program
1. Gunakan program untuk mengeluarkan informasi log
impor java.io.IOException;
import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
/**
*
* @versi: 1.1
*
* @penulis: Su Ruonian<a href="mailto:[email protected]">Kirim email</a>
*
* @sejak: 1.0 Waktu pembuatan: 1-1-2013 15:19:42
*
* @fungsi: Keluarkan kode log-through
*
*/
kelas publik Log4jPrintByCode {
logger Logger statis pribadi = Logger.getLogger(Log4jPrintByCode.class);
tata letak tata letak pribadi = SimpleLayout baru();
FileAppender fileAppender pribadi;
//Gunakan dependensi konstruksi dan inisialisasi saat membuat objek
public Log4jPrintByCode(Tata letak tata letak, Level level,String distDir){
BasicConfigurator.configure(); //Gunakan informasi konfigurasi default, tidak perlu menulis log4j.properties
mencoba {
init(tata letak,tingkat, distDir);
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
}
public void init(Tata letak tata letak, Level level,String distDir) memunculkan Pengecualian{
logger.setLevel(level); //Setel tingkat keluaran log
fileAppender = FileAppender baru(tata letak,distDir,false);
logger.addAppender(fileAppender); //Tambahkan terminal keluaran
}
public static void main(String[] args) {
Tata letak SimpleLayout = SimpleLayout baru();
String logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = Log4jPrintByCode baru(tata letak,Level.INFO,logDir);
//Informasi berikut akan ditampilkan
log4jCode.logger.info("info log dicetak oleh log4j");
log4jCode.logger.warn("log memperingatkan cetak oleh log4j");
log4jCode.logger.error("kesalahan log dicetak oleh log4j");
}
Tata Letak publik getLayout() {
tata letak pengembalian;
}
public void setLayout(Tata letak tata letak) {
this.tata letak = tata letak;
}
publik FileAppender getFileAppender() {
kembalikan fileAppender;
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// Rekam informasi tingkat info
jika (logger.isInfoEnabled()) {
logger.info("Ini adalah pesan info dari Dao.");
}
2.Log4J mengeluarkan informasi log yang sama ke beberapa tujuan
/* Ganti basis data */
gunakan db_log4j;
/* Tabel informasi log */
buat tabel tb_log(
logId int bukan null auto_increment komentar 'nomor seri',
createDate varchar(45) default komentar nol 'Waktu pembuatan log',
utas varchar(45) default komentar nol 'utas saat ini',
level varchar(45) default komentar nol 'Level log saat ini',
kelas varchar(45) default komentar nol 'Buat kelas log',
pesan varchar(245) default komentar nol 'Catat informasi spesifik',
kunci utama (logId)
);
Contoh aplikasi mengeluarkan informasi log ke konsol, file, dan database secara bersamaan.
Membuat database dan tabel
/* Ganti basis data */
gunakan db_log4j;
/* Tabel informasi log */
buat tabel tb_log(
logId int bukan null auto_increment komentar 'nomor seri',
createDate varchar(45) default komentar nol 'Waktu pembuatan log',
utas varchar(45) default komentar nol 'utas saat ini',
level varchar(45) default komentar nol 'Level log saat ini',
kelas varchar(45) default komentar nol 'Buat kelas log',
pesan varchar(245) default komentar nol 'Catat informasi spesifik',
kunci utama (logId)
);
#Tentukan keluaran A1 ke pengontrol
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Tentukan mode tata letak A1 sebagai PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Tentukan format keluaran A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Tentukan keluaran A2 ke file
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Tentukan file mana yang akan dijadikan output A2
log4j.appender.A2.File=./log/sysLog.log
#Tentukan panjang maksimum file keluaran A2
log4j.appender.A2.MaxFileSize = 1KB
#Tentukan jumlah file cadangan untuk A2
log4j.appender.A2.MaxBackupIndex = 3
#Tentukan mode tata letak A2 sebagai PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Tentukan mode keluaran A2
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
#Tentukan keluaran A3 ke database
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.pengguna=root
log4j.appender.A3.password=root
#Tentukan tata letak A3 dan pernyataan SQL yang dijalankan
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=MASUKKAN KE tb_log(tanggal buat,utas,tingkat,kelas,pesan) nilai('%d','%t','%-5p','%c','%m ')
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
*
* @versi: 1.1
*
* @penulis: Su Ruonian<a href="mailto:[email protected]">Kirim email</a>
*
* @sejak: 1.0 Waktu pembuatan: 1-1-2013 16:13:59
*
* @fungsi: Mengontrol keluaran informasi log ke berbagai tujuan melalui file konfigurasi
*
*/
kelas publik Log4jPrintByConfigure {
logger Logger statis pribadi = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args) melempar Pengecualian {
//Muat file konfigurasi log log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//File disimpan di folder konfigurasi di direktori yang sama dengan src
//Jika ditempatkan di bawah src, parameternya harus "bin/log4j.properties" atau "src/log4j.properties". Disarankan untuk menggunakan bin sebagai standar.
//Informasi berikut akan dicetak
logger.debug("logger mencetak pesan DEBUG");
logger.info("logger mencetak pesan INFO");
logger.warn("logger mencetak pesan PERINGATAN");
logger.error("logger mencetak pesan ERROR");
logger.fatal("Ini pesan FATAL");
}
}