Artikel ini terutama memperkenalkan konfigurasi SLF4J+Logback di Java Engineering.
Sebelum memperkenalkan konfigurasi logback SLF4J+, pertama -tama perkenalkan logback logback dari komponen log.
(1) Pendahuluan dan konfigurasi logback komponen log
1. Pengantar logback
Logback adalah komponen log open source lain yang dirancang oleh pendiri LOG4J. Logback saat ini dibagi menjadi tiga modul: logback-core, logback-klasik dan aktivitas logback. Logback-Core adalah modul dasar dari dua modul lainnya. Logback-Classic adalah versi Log4j yang lebih baik. Selain itu, Logback-Classic sepenuhnya mengimplementasikan API SLF4J sehingga Anda dapat dengan mudah menggantinya dengan sistem logging lainnya seperti log4j atau JDK14 logging. Modul Akses Akses Logback-Access terintegrasi dengan wadah servlet untuk menyediakan fungsi mengakses log melalui HTTP. Logback adalah situs web resmi yang menggabungkan dua komponen dengan SLF4J sebagai berikut:
Situs web resmi logback: http://logback.qos.ch
Situs web resmi SLF4J: http://www.slf4j.org
Komponen yang digunakan dalam artikel ini adalah sebagai berikut: Silakan kunjungi situs web resmi untuk diunduh!
Logback -Access -.0.0.jar
logback -classic -.0.0.jar
logback-core-1.0.0.jar
Slf4j-api-1.6.0.jar
2. Alasan Logback Mengganti Log4j:
Logback dan Log4j sangat mirip. Berikut adalah beberapa keuntungan dari logback dibandingkan log4j:
1. Lebih cepat mengimplementasikan penulisan ulang kernel dari logback, dan kinerjanya meningkat lebih dari 10 kali pada beberapa jalur eksekusi kunci. Selain itu, logback tidak hanya meningkatkan kinerja, tetapi juga memiliki lebih sedikit beban memori yang diinisialisasi.
2. Logback uji yang sangat penuh telah diuji selama beberapa tahun, berjam -jam. Tes logback sangat berbeda. Dari sudut pandang penulis, ini adalah alasan sederhana dan penting untuk memilih logback alih -alih log4j.
3. Logback-Classic secara alami diimplementasikan dengan SLF4J Logback-Classic untuk mencapai SLF4J. Dalam penggunaan SLF4J, Anda tidak dapat merasakan Logback-Classic. Selain itu, karena Logback-Classic mengimplementasikan SLF4J secara alami, beralih ke Log4j atau lainnya sangat mudah.
4. Situs web resmi dokumen yang sangat lengkap memiliki lebih dari 200 halaman dokumen.
5. Secara otomatis memuat ulang file konfigurasi sebagai modifikasi file konfigurasi, Logback-Classic dapat secara otomatis memuat ulang file konfigurasi. Proses pemindaian cepat dan aman, tidak perlu membuat utas pemindaian lain. Teknologi ini sepenuhnya menjamin bahwa aplikasi dapat berjalan di lingkungan JEE.
6. Lilith Lilith adalah pengamat insiden log, mirip dengan gergaji log4j. Lilith juga dapat memproses sejumlah besar data log.
7. Mode Perhatian dan Pemulihan yang Sangat Ramah Dalam Mode Perhatian, beberapa contoh FileAppender dijalankan di bawah beberapa JVM, dan dapat dengan aman menulis file log yang sama. RollingFileAppender akan memiliki beberapa keterbatasan. FileAppender Logback dan subkelasnya termasuk RollingFileAppender dapat pulih dari pengecualian I/O yang sangat ramah.
8. File konfigurasi dapat menangani berbagai situasi. File konfigurasi ini hanyalah perbedaan kecil, yang dapat diimplementasikan dan diimplementasikan, sehingga file konfigurasi dapat beradaptasi dengan beberapa lingkungan.
9. Filter (filter) Terkadang, diperlukan masalah, dan diperlukan log. Dalam log4j, hanya mengurangi level log, tetapi ini akan membuat banyak log dan mempengaruhi kinerja aplikasi. Di Logback, Anda dapat terus mempertahankan level log itu dan menghapus beberapa kasus khusus. Untuk mencapai fungsi ini, Anda hanya perlu menambahkan 4 baris konfigurasi XML. Anda dapat merujuk ke mdcfilter.
10. Siftingappener (appender yang sangat multi -fungsional) dapat digunakan untuk membagi file log sesuai dengan parameter operasi yang diberikan. Misalnya, SiftingAppender dapat membedakan sesi pengguna yang mengikuti sesi pengguna, dan kemudian setiap pengguna akan memiliki file log.
11. Secara otomatis mengompres log RollingFileAppender yang telah dipukul. Kompresi adalah proses asinkron, jadi bahkan untuk file log besar, aplikasi tidak akan terpengaruh dalam proses kompresi.
12. Pohon tumpukan memiliki versi paket logback.
13. Secara otomatis menghapus file log lama dengan mengatur properti maxhistory dari timebasedRollingPolicy atau sizeandmededfnatp. Jika Maxhistory 12 diatur, file log yang telah lebih dari 12 bulan akan secara otomatis dihapus.
Singkatnya, logback lebih baik dari log4j.
3. Pengantar Konfigurasi Logback
1. Logger, Appender, dan Tata Letak
Logger, sebagai perekam log, mengaitkannya pada konteks yang sesuai yang digunakan, terutama digunakan untuk menyimpan objek log.
Appender terutama digunakan untuk menentukan tujuan output log.
Tata letak bertanggung jawab atas output acara menjadi string, informasi log yang diformat.
2. Konteks Logger
Setiap logger dikaitkan dengan LoggerContext. Semua logger lain juga diperoleh melalui metode statis dari org.slf4j.loggerFactory kelas getLogger. Metode GetLogger dinamai oleh Logger. Gunakan nama yang sama untuk memanggil metode LoggerFactory.getLogger.
3. Pewarisan level dan level yang efektif
Logger dapat ditugaskan. Level meliputi: jejak, debug, info, peringatan, dan kesalahan, didefinisikan dalam kelas ch.qos.logback.classic.level. Jika logger tidak ditugaskan, maka itu akan mewarisi level dari leluhur terdekat dari tingkat distribusi. Level default Root Logger adalah debug.
4. Metode pencetakan dan aturan seleksi dasar <BR /> Metode pencetakan menentukan tingkat permintaan. Misalnya, jika L adalah instance logger, maka pernyataan l.info ("..") adalah pernyataan rekaman dengan info level. Tingkat permintaan log disebut diaktifkan ketika lebih tinggi atau sama dengan tingkat valid dari loggernya, jika tidak ia disebut dinonaktifkan. Level Permintaan Catatan adalah P, dan level logger yang valid adalah q.
Aturan ini adalah jantung dari logback. Penyortiran level adalah: Lacak <debug <info <warn <warn <error
4. Konfigurasi Default Logback <BR /> Jika konfigurasi file logback-test.xml dan logback.xml tidak ada, maka Logback akan memanggil BasicConfigurator secara default untuk membuat konfigurasi yang diminimalkan. Untuk meminimalkan konfigurasi yang terdiri dari konsoleAppender yang terkait dengan logger root. Mode output adalah %d {hh: mm: ss.sss} [ %thread] %-5Level %Logger {36} - %msg %n's PatternLayOutEndCoder. Level default Root Logger adalah debug.
1. File konfigurasi logback
Sintaks file konfigurasi logback sangat fleksibel. Karena fleksibilitas, skema DTD atau XML tidak dapat didefinisikan. Namun demikian, Anda dapat menggambarkan struktur dasar file konfigurasi dengan cara ini: Mulailah dengan <onfiguration>, ada nol atau lebih elemen <pender>, nol atau lebih elemen <Gogger>, dan elemen <soot> maksimum.
2. Langkah -langkah konfigurasi default logback
(1). Coba temukan file logback-test.xml di bawah ClassPath;
(2). Jika file tidak ada, temukan file logback.xml;
(3). Jika kedua file tidak ada, logback menggunakan BAS ICConfigurator untuk secara otomatis mengonfigurasi dirinya sendiri, yang akan menyebabkan output rekaman ke konsol.
3. File Logback.xml
<? Versi XML = "1.0" encoding = "UTF-8"?> <Konfigurasi> <!-Tentukan alamat penyimpanan file log. Appender name = "stdout"> <!-log output output-> <coding> utf-8 </coding> <aayout> <!-output format:%d berarti tanggal,%utas menunjukkan nama utas,%-5Level: Lebar 5 Lebar Karakter Dari Layar Kiri 5 Lebar Karakter%MSG: Pesan Log,%n adalah Simbol Perubahan-> <SenStern>%D {yyyy-mm-dd hh: mm: ss.sss} [%thread]%- 5Level %Logger {50}- %msg %n </at pola> </prayout> </pespencer> <!-menghasilkan file log setiap hari-> <ppender name = "file"> <codeDing> utf-8 </s Encoding> <lollingpolicy> <!-Output nama file oleh file log-> <filenamepattern> $ {log_home} /myapp.log.%d {yyyy-mm-dd}. /MAXHISTORY> </rollingpolice> <wapsout> <!-output yang diformulasikan:%d mewakili tanggal,%utas mewakili nama utas,%d mewakili nama utas,%-5 level: 5 karakter lebar yang ditampilkan dari msg%kiri: Pesan log,%n adalah perubahan karakter-> <pol>%d {yyyy-mm-dd hh: mm: ss.sss} [%thread]%-5 level%logger {50}-%msg%n </pola > </tapeout> <!-Ukuran terbesar dari file log-> <priggeringpolice> <maxfileSize> 10mb </priggeringpolice> </appen der> <!-Tampilkan parameter untuk hibernate sql yang didedikasikan untuk kustomisasi hibernate> <!- -> <Logger Name = "OrganNate.Type.Descriptor.sql.basicbinder =" Trace " /> <logger =" org.hibernate. org.hibernate.sql "level =" def " /> <log. erameters" level = "debug" /> <logger name = "org.hibernate.engine.qury.hqlqueryplan" level = "debug" /<!- LOG OUTPUT LOVE-> <level root = "info"> <ppender-ref = "stdout" /> <ppender-ref ref = "file" /> < /root> <!-log ke database-> <nama ppender = "DB"> <! DataBasEname </RURL> <USERRER> ROOT </SUSER> <BOCTORD> ROOT </sword> </dateSource> </ConnectionSource> </pespencer> -> </ Configuration >> </Configuration >> </Configuration>> </Configuration >> 5. Gunakan logback referensi dalam program
paket com.stu.system.action; kelas);
Selanjutnya, mari kita perkenalkan konfigurasi logback SLF4J+dalam proyek Java.
1. MAVEN -BAS SLF4J+LOGBACK POM.XML Konfigurasi
<dependency> <GroupId> org.slf4j </groupid> <ArtifactId> slf4j-api </stifactid> <version> 1.7.10 </version> </dependency> <groupid> c h.qos.logback </groupid> <ArtifactId> Logback-Classic </RaintifactId> <version> 1.1.2 </version> </deendecy> <G.QoS. /Versi> </dependency>
2. Buat file konfigurasi Logback.xml baru di direktori ClassPath
<? Xml Version = "1.0" encoding = "UTF-8"?> <!-Pindai: Ketika properti ini diatur ke true, jika file konfigurasi berubah, itu akan dimuat ulang, dan nilai defaultnya benar. ScanPeriod: Mengatur interval waktu untuk memantau apakah ada modifikasi dari file konfigurasi. Interval waktu default adalah 1 menit. DEBUG: Ketika atribut ini diatur ke True, informasi log internal logback akan dicetak untuk memeriksa status logback yang berjalan secara real time. Nilai defaultnya salah. -> <configuration scan = "false" scanperiod = "60 detik" debug = "false"> <!-Tentukan direktori root log-> <properti nama = "log_home" value = "/app/log/log " / / <!-Tentukan nama file log-> <name properti =" appname "value =" netty "> </property> <!-ch.qos.logback.core.consoleAppender menunjukkan output konsol-> <Appender name = "stdout"> <coding> utf-8 </coding> <!-Format output log:%d berarti tanggal,%utas menunjukkan nama utas,%-5 level: level 5 lebar karakter 5 karakter dari%kiri% %%%%%% 5 Lebar Karakter %%%%ikel logger {50} berarti bahwa nama logger adalah 50 karakter, jika tidak itu akan dibagi sesuai dengan periode tersebut. %msg: pesan log, %n adalah perubahan lines-> <layout> <at pola> %d {yyyy-mm-dd hh: mm: ss.sss} [ %thread] %-5Level %logger {50}- % msg% n </at pola> </layout> </appent> <!- gulir untuk merekam file, pertama catat log ke file yang ditentukan, dan ketika kondisi tertentu dipenuhi, catat log ke file lain- -> <appender name = "applogappender"> <coding> utf-8 </coding> <!-nama file log yang ditunjuk-> <pangkalan> $ {log_home}/$ {appname} .log </file> <! -> <RollingPolicy> <!-Lokasi penyimpanan dan nama file file yang dihasilkan selama Rolling%D {yyyy-mm-dd}: roll roll by day to day. AppName}-%d {yyyy-mm-dd}-%i.log </filenamepattern> <!-node opsional, kontrol file arsip yang dipesan terbesar jika kuantitas melebihi kuantitas, hapus file lama. Dengan asumsi bahwa itu digulung setiap hari dan Maxhistory adalah 365, hanya file 365 hari terakhir yang disimpan untuk menghapus file lama sebelumnya. Perhatikan bahwa file lama dihapus, dan direktori yang dibuat untuk arsip juga akan dihapus. -> <maxhistory> 365 </preathistory> <!-Ukuran file log melebihi maxFileSize, dan file log bergulir sesuai dengan%yang saya sebutkan di atas memperhatikan konfigurasi sizebasedtricgePolicy, harus dikonfigurasi dengan timebasedFileNamingAndrigeringPolicy-. TimebasedFilenamingandtriggeringPolicy> <MaxFilesize> 100MB </MaxFilesize> </TimeBasedFilenamingan DtriggeringPolicy> </RollingPolicy> <!-log output format:%d represents the date time,%thread indicates the thread name,%-5LEVEL: The level of 5 characters from Tampilan kiri 5 Lebar Karakter%Logger {50} menunjukkan bahwa nama logger adalah 50 karakter, jika tidak itu akan dibagi sesuai dengan periode tersebut. %msg: pesan log, %n adalah perubahan baris-> <laayout> <poler> %d {yyyy-mm-dd hh: mm: ss.sss} [ %utas]-[ %-5 level] [ %logger {50}: %line]- %msg %n </patter> </layout> </appender> <!- Logger terutama digunakan untuk menyimpan objek log. Paruh pertama dari level paket: level log yang akan direkam, termasuk jejak <debug <info <warn <warn <penambahan kesalahan: fungsinya adalah apakah anak-anak-logger menggunakan appender yang dikonfigurasi oleh rootlogger untuk output, false: itu berarti hanya itu hanya itu saja Appender dari Logger saat ini digunakan -ref, true: appender-ref dan rootlogger dari logger-ref dan rootlogger-ref = "ERROR" /> <! "level =" info "additivity =" true "> <ppender-ref ref =" applogappender " /> < /logger> <!-root dan logger adalah hubungan antara ayah dan anak. Jika tidak ada definisi khusus, itu adalah itu Default. -> <root level = "info"> <ppender-ref = "stdout" /> <ppender-ref = "applogappender" /> </soot> </donfiguration>