1. Ikhtisar
1.1 Latar Belakang
Pencatatan sangat penting dalam pengembangan harian kita. Menambahkan logging dalam aplikasi umumnya didasarkan pada tiga tujuan: memantau perubahan variabel dalam kode, secara berkala merekamnya ke dalam file untuk analisis statistik oleh aplikasi lain; melacak lintasan runtime kode sebagai dasar untuk audit di masa depan; Bertindak sebagai debugger di lingkungan pengembangan terintegrasi, mencetak informasi debugging ke file atau konsol.
1.2 PENDAHULUAN
LOG4J (Log untuk Java) adalah proyek open source dari Apache, yang menyediakan cara halus untuk mengelola log. Melalui file konfigurasi, kami dapat mengontrol format output dan tujuan setiap log dengan beberapa pilihan. Dengan mendefinisikan tingkat informasi, kami juga dapat secara fleksibel mengalihkan informasi umpan balik dalam kode. Sederhananya, Log4j adalah perpustakaan API yang membantu pengembang mengelola output log. Fitur yang paling penting adalah bahwa file konfigurasi dapat secara fleksibel mengatur prioritas informasi log, tujuan output informasi log, dan format output informasi log.
2. Konfigurasi Log4j
Diagram kelas 2.1LOG4J
2.2 Menentukan file konfigurasi
Log4J dapat diatur secara dinamis melalui program Java. Kerugian yang jelas dari metode ini adalah: jika Anda perlu memodifikasi level output log dan informasi lainnya, Anda harus memodifikasi file java dan kemudian mengkompilasi ulang, yang sangat merepotkan.
Menggunakan file konfigurasi akan membuat aplikasi kami lebih fleksibel untuk mengonfigurasi log, dan metode output log termasuk prioritas output, tujuan output, dan format output. LOG4J mendukung dua format file konfigurasi, satu adalah file XML, dan yang lainnya adalah file fitur Java log4j.properties (key = value).
2.3 File Konfigurasi Log4j.Properties
Ketika log4j dipanggil untuk pertama kalinya, log4j akan menemukan file di classpath (../web-inf/class/ tentu saja, selama direktori termasuk dalam classpath), dan membaca konfigurasi lengkap file. File konfigurasi ini memberi tahu Log4j format apa, informasi apa yang akan dikeluarkan ke tempatnya. Sejalan dengan itu, kita perlu mengonfigurasi tiga aspek:
1. Direktori root (level dan tujuan);
2. Tujuan (konsol, file, dll.);
3. Gaya Output (Cara Menampilkan Konten Log)
Contohnya adalah sebagai berikut:
Level output #set log
log4j.rootlogger = debug, appender1
#Output ke konsol
LOG4J.APPENDER.APPENDER1 = org.apache.log4j.consoleAppender
#Style adalah ttcclayout
LOG4J.AppENDER.APPENDER1.LAYOUT = org.apache.log4j.ttcclayout
2.4. LOG4J DESKRIPSI Tiga Komponen
Log4j memiliki tiga komponen utama: logger, appender (sumber output) dan tata letak (tata letak). Menggabungkan ketiga komponen ini memungkinkan pencatatan mudah dari jenis dan tingkat informasi, dan dapat mengontrol gaya dan lokasi output log saat runtime. Berikut ini adalah tiga komponen:
2.4.1 Logger Logger
Objek Logger digunakan untuk menggantikan System.out atau System.err's Log Writer, yang digunakan untuk memberikan pemrogram dengan output informasi log.
Logger root dikonfigurasi dengan sintaks:
LOG4J.ROOTLOGGER = [LEVEL], APPENDERNAME, APPERDERNAME,…
Di antara mereka, level adalah prioritas penebangan, dibagi menjadi off, fatal, kesalahan, memperingatkan, info, debug, semua atau tingkat kustom. Log4j merekomendasikan hanya menggunakan empat level, dengan prioritas dari tinggi ke rendah, yaitu kesalahan, peringatan, info, dan debug. Pada level yang ditentukan di sini, Anda dapat mengontrol sakelar ke tingkat informasi log yang sesuai dalam aplikasi. Misalnya, jika level info didefinisikan di sini, semua informasi log level debug dalam aplikasi tidak akan dicetak. nama unggulan menentukan di mana informasi log adalah output. Beberapa tujuan output dapat ditentukan secara bersamaan.
2.4.2 output tujuan appender
Sistem log log4J memungkinkan output log ke tempat yang berbeda, seperti konsol (konsol), file (file), file baru dihasilkan berdasarkan hari atau ukuran file, dan dikirim ke tempat lain dalam bentuk aliran, dll.
Konfigurasikan Appender, sintaksnya dinyatakan sebagai:
LOG4J.Appender.ApplerName = sepenuhnya.Qualified.name.of.Appender.ClassLog4j.Appender.applerName.Option1 = value1… LOG4J.Appender.applerName.Option = valuen
"Full.Qualified.name.of.Appender.class" dapat menentukan salah satu dari lima tujuan berikut:
1) .org.apache.log4j.consoleAppender (konsol)
2) .org.apache.log4j.fileAppender (file)
3) .org.apache.log4j.dailyrollingfileAppender (menghasilkan satu file log setiap hari)
4) .org.apache.log4j.rollingfileAppender (file baru dihasilkan ketika ukuran file mencapai ukuran yang ditentukan)
5) .org.apache.log4j.writerappender (kirim informasi log dalam format stream ke tempat tertentu)
(1). Opsi ConsoleAppender
(2). Opsi FileAppender
(3) .DailyRollingFileAppender Opsi
Artinya, format yang sesuai adalah sebagai berikut:
1) '.' Yyyy-mm: Bulanan
2) '.' Yyyy-ww: Mingguan
3) '.' Yyyy-mm-dd: setiap hari
4) '.' Yyyy-mm-dd-a: dua kali sehari
5) '.' Yyyy-mm-dd-hh: jam
6) '.' Yyyy-mm-dd-hh-mm: per menit
4.DollingFileAppender Opsi
2.4.3 tata letak format (tata letak)
Terkadang saya ingin memformat output log saya sendiri sesuai dengan preferensi saya. Log4j dapat melampirkan tata letak di belakang appender untuk menyelesaikan fungsi ini.
Konfigurasikan tata letak, sintaksnya dinyatakan sebagai:
LOG4J.Appender.applerName.layout = sepenuhnya.q dariyified.name.of.layout.classlaslog4j.Appender.applerName.layout.option1 = value1… LOG4J.Appender.ApplerName.layout.option = Valuen
Tata letak menyediakan empat gaya output log, sebagai berikut:
(1) .org.apache.log4j.htmllayout (tata letak dalam bentuk tabel html),
(2) .org.apache.log4j.patternlayout (mode tata letak dapat ditentukan secara fleksibel),
(3) .org.apache.log4j.simplelayout (berisi level dan string informasi dari informasi log),
(4) .org.apache.log4j.ttcclayout (termasuk waktu pembuatan log, utas, kategori, dll. Informasi)
Opsi htmllayout
LocationInfo = true: Nilai default false, output nama file java dan nomor baris
Title = File Aplikasi Saya: Nilai default adalah pesan log log4J.
2. Opsi PatternLayout
ConversionPattern =%m%n: Menentukan cara memformat pesan yang ditentukan.
Apa yang perlu dijelaskan di sini adalah arti beberapa simbol dalam format informasi log:
Pengubah dapat ditambahkan antara % dan karakter pola untuk mengontrol lebar minimum, lebar maksimum, dan penyelarasan teks. menyukai:
1)%20c: Tentukan nama kategori output, lebar minimum adalah 20. Jika nama kategori kurang dari 20, itu dijalankan dengan benar secara default.
2)%-20C: Menentukan nama kategori output, lebar minimum adalah 20. Jika nama kategori kurang dari 20, tanda "-" menentukan perataan kiri.
3)%. 30c: Tentukan nama kategori output. Lebar maksimum adalah 30. Jika nama kategori lebih besar dari 30, karakter tambahan di sebelah kiri akan terputus, tetapi jika mereka kurang dari 30, tidak akan ada spasi.
4)%20.30C: Jika nama kategori kurang dari 20, isi ruang dan sejajarkan dengan benar. Jika namanya lebih panjang dari 30 karakter, potong karakter tambahan dari kiri.
2.5.LOG4J Contoh Konfigurasi
Kesederhanaan konfigurasi log4j membuatnya menyebar di lebih banyak aplikasi: File konfigurasi log4J mengimplementasikan satu set fungsi lengkap seperti output ke konsol, file, file rollback, mengirim surat log, output ke tabel log basis data, dan tag khusus.
log4j.rootlogger = debug, konsol, a1, im log4j.addivity.org.apache = true
n berlaku untuk konsol
LOG4J.Appender.Console = org.apache.log4j.consoleAppenderLog4j.Appender.threshold = debug log4j.applender.console.target = System.outlog4j.appender.console.layout = org.apache.log4j.patternlayout LOG4J.Appender.console.layout.conversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%n
n berlaku untuk file
LOG4J.Appender.file = org.apache.log4j.fileAppenderlog4j.applender.file.file = file.loglog4j.applay.file.append = falselog4j.appender.file.layout = org.apache.log4j.patternlayoutlog.pigher.ponbonat.apaple.apache.apache.log4j.patternlaylaylaylog - % -4r [ %t] %-5p %c %x - %m %n
n berlaku untuk file rollback
LOG4J.Appender.rolling_file = org.apache.log4j.rollingfileAppenderLog4j.applender.rolling_file.threshold = errorLog4j.appling.rolling_append.file = rolling.loglog4j.applend.appling.rolling.rolling.appling ender.rolling_file.maxfileSize = 10kblog4j.appender.rolling_file.maxbackupIndex = 1Log4j.Appler.rolling_file.layout = org.apache.log4j.patternlayoutlog4j.appender.rolling_file.apache. %-5p %c %x - %m %n
n berlaku untuk soket
LOG4J.Appender.socket = org.apache.log4j.rollingfileAppenderLog4j.Appender.socket.remotehost = localhost log4j.appender.socket.port = 5001log4j.appender.socket.locationinfo = true log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutlog4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n%n# Log Factor 5 Appender LOG4J.APPENDER.LF5_APPENDER = org.apache.log4j.lf5.lf5Appender LOG4J.Appender.lf5_Appender.maxnumberofrecords = 2000n Kirim log ke email
LOG4J.Appender.mail = org.apache.log4j.net.smtpappenderlog4j.appender.mail.threshold = fatallog4j.appender.mail.buffersize = 10Log4j.Appender.mail.from=web@www.wuset.comlog4j.appender.mail.smtphost=www.wusetu.comlog4j.applent.mail.subject=log4j Pesan LOG4J.Appender.mail.to=web@www.wusetu.comlog4j.applay.mail.layout=org.apache.log4j.patternlayout log4j.Appender.mail.layout.conversionPattern =%d-%c-%-4r [%t]%-5p%c
n untuk database
LOG4J.Appender.database = org.apache.log4j.jdbc.jdbcappenderlog4j.applender.database.url = jdbc: mysql: // localhost: 3306/testLog4j.appling.database.driver = comsql LOG4J.Appender.database.user = rootlog4j.Appender.database.password = log4j.Appender.database.sql = masukkan ke dalam nilai log4j (pesan) (' %d - %c - % -4r [ %t] %-5p %c %x - %c - % -4r [ %t] %-5p %c %x - %c - % -4r [ %t] %c %c %x - %c - % -4r [ %t] %c %c %x - %c - % -4r [ %t] %c %c %x - %c - % -4r [ %t] %c %c %x - %c - % -4R [ %t] %c %c %x - %c - % -4r [ %t] %c %c %x - %c - % -4R [ %t] %c %c %x - %c - % -4R [ %t] %c %c % - % %m %n ') log4j.Appender.database.layout = org.apache.log4j.patternlayout LOG4J.Appender.database.layout.conversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%nlog4j.Appender.a1 = org.apache.log4j.dailyrollingfileAppender LOG4J.Applender.apache.file = ongkos = samplAmesPender LOG4J.Appender.A1.DatePattern = YYYYMMDD-HH'.LOG4J'LOG4J.APPENDER.A1.LAYOUT = org.apache.log4j.xml.xmllayoutn Appender Kustom
LOG4J.Appender.im = net.cybercorlin.util.logger.Appender.imappenderlog4j.applender.im.host = mail.cybercorlin.net log4j.appender.im.username = nama pengguna log4j.appender.im.password = kata sandi log4j.appender.im.recipent =penders =password = password.applender [email protected]=org.apache.log4j.patternlayoutlog4j.applender.im.layout.conversionPattern = [Framework] %d - %C - % -4r [ %t] %-5p %c %m %n
3. Konfigurasikan Log4J untuk Musim Semi di Aplikasi Web
Pertama, Anda perlu menambahkan pernyataan konfigurasi berikut ke file web.xml:
<!-Untuk menghindari konflik antar proyek, tentukan webapprootkey yang unik-> <Context-param> <param-name> webapprootkey </param-name> <param-value> myproject.root </param-value> </context-param> <! <param-value> /web-inf/classes/config/log4j/log4j.properties </param-value> </context-param> <!-Tetapkan interval waktu untuk menyegarkan file konfigurasi log, setel ke 60s di sini-> <context-param> <param-name> log4jrefrestervintervintervintervintervinterver di sini-> <context-param> <param-name> log4jrefrestervintervintervintervintervors <param-value> 60000 </param-value> </context-param> <!-Muat pendengar log4J di Spring Framework LOG4JConfigListener-> <listener> <Distener-Class> org.springframework.web.util.log4jconfigListener </listener> leuder.web.util.log4jFigListener </listener>
Dianjurkan untuk menetapkan nilai properti log4jConfiglocation ke: /web-inf/classes/log4j.properties, sehingga ketika kita melakukan beberapa tes, kita dapat merekam informasi log dengan benar ketika kita tidak memulai aplikasi web. LOG4JConfigListener adalah kelas alat yang disediakan oleh Spring. Ini membuka utas pemantauan log4J dan mendeteksi perubahan konfigurasi log setiap 60 detik (definisi variabel LOG4JREFRESHIRTEVAL), sehingga tidak perlu memulai kembali layanan web setiap kali untuk menerapkan konfigurasi baru. Di Tomcat, tidak ada properti sistem yang dipisahkan berdasarkan aplikasi web. Oleh karena itu, "webapprootkey" yang unik harus ditentukan untuk setiap aplikasi web, dan kami menamakannya webapp.root. Setelah memulai lingkungan, Log4JConfigListener akan menyuntikkan nilai ke variabel webapp.root.
4. Gunakan log4j dalam kode
4.1. Dapatkan perekamnya
Menggunakan log4j, langkah pertama adalah mendapatkan perekam log, yang akan bertanggung jawab untuk mengendalikan informasi log.
Public Static Logger GetLogger (nama string)
Dapatkan logger dengan nama yang ditentukan dan, jika perlu, buat logger baru untuk nama tersebut. Nama umumnya dinamai di kelas ini, seperti:
static logger logger = logger.getLogger (serverwithlog4j.class.getName ())
4.2. Baca file konfigurasi
Setelah mendapatkan logger, langkah kedua akan mengkonfigurasi lingkungan log4j, dengan sintaks sebagai:
Jika Anda menempatkan log4j.properties di direktori root proyek, Anda juga tidak dapat menulis kalimat ini, dan program akan secara otomatis menemukan file konfigurasi.
BASICConfigurator.configure (): Secara otomatis dan cepat gunakan lingkungan LOG4J default. PropertyConfigurator.Configure (String ConfigFileName): Membaca file konfigurasi yang ditulis menggunakan file fitur Java.
Domconfigurator.configure (string fileName): Baca file konfigurasi dalam formulir XML.
LOG4J diinisialisasi menggunakan 3 konfigurator di atas, dan penggunaan properti Configurator cocok untuk semua sistem. Pernyataan berikut.
Properticonfigurator.configure ("log4j.properties");Untuk proyek Java umum, LOG4J dapat diinisialisasi tanpa menggunakan pernyataan di atas. Log4j akan secara otomatis menemukan file konfigurasi di bawah ClassPath dan menginisialisasi itu. Jika log4j tidak dapat secara otomatis menginisialisasi file konfigurasi, maka metode di atas perlu diinisialisasi.
Catatan: Saat menginisialisasi file konfigurasi, yang terbaik adalah menjalankannya hanya sekali ketika sistem dimulai. Jika mengeksekusinya beberapa kali, satu adalah pemborosan sumber daya, dan yang lainnya adalah untuk versi lama Log4j, masalah dapat terjadi ketika menggunakan DailyrollingFileAppender.
4.3. Masukkan informasi catatan (format informasi log)
Ketika dua langkah yang diperlukan sebelumnya selesai, Anda dapat dengan mudah memasukkan pernyataan logging dari berbagai tingkat prioritas di mana pun Anda ingin masuk. Sintaksnya adalah sebagai berikut:
Logger.debug (pesan objek);