log4j - Panduan Cepat

log4j adalah kerangka kerja logging (API) yang andal, cepat, dan fleksibel yang ditulis di Java, yang didistribusikan di bawah Lisensi Perangkat Lunak Apache.

log4j telah diporting ke bahasa C, C ++, C #, Perl, Python, Ruby, dan Eiffel.

log4j sangat dapat dikonfigurasi melalui file konfigurasi eksternal saat runtime. Ini melihat proses pencatatan dalam hal tingkat prioritas dan menawarkan mekanisme untuk mengarahkan informasi pencatatan ke berbagai tujuan, seperti database, file, konsol, UNIX Syslog, dll.

log4j memiliki tiga komponen utama:

  • loggers: Bertanggung jawab untuk menangkap informasi logging.

  • appenders: Bertanggung jawab untuk menerbitkan informasi logging ke berbagai tujuan pilihan.

  • layouts: Bertanggung jawab untuk memformat informasi logging dalam gaya yang berbeda.

Sejarah log4j

  • Dimulai pada awal tahun 1996 sebagai Tracing API untuk proyek EU SEMPER (Secure Electronic Marketplace for Europe).

  • Setelah peningkatan yang tak terhitung jumlahnya dan beberapa inkarnasi, API awal telah berevolusi menjadi log4j, paket logging populer untuk Java.

  • Paket ini didistribusikan di bawah Lisensi Perangkat Lunak Apache, lisensi sumber terbuka lengkap yang disertifikasi oleh inisiatif sumber terbuka.

  • Versi log4j terbaru, termasuk kode sumber lengkapnya, file kelas, dan dokumentasinya dapat ditemukan di http://logging.apache.org/log4j/.

Fitur log4j

  • Ini aman untuk benang.

  • Ini dioptimalkan untuk kecepatan.

  • Ini didasarkan pada hierarki logger bernama.

  • Ini mendukung beberapa penambah keluaran per logger.

  • Ini mendukung internasionalisasi.

  • Ini tidak terbatas pada satu set fasilitas yang telah ditentukan sebelumnya.

  • Perilaku logging dapat disetel saat runtime menggunakan file konfigurasi.

  • Ini dirancang untuk menangani Pengecualian Java sejak awal.

  • Ini menggunakan beberapa level, yaitu ALL, TRACE, DEBUG, INFO, WARN, ERROR dan FATAL.

  • Format keluaran log dapat dengan mudah diubah dengan memperluas kelas Tata Letak .

  • Target keluaran log serta strategi penulisan dapat diubah dengan implementasi antarmuka Appender.

  • Ini gagal-berhenti. Namun, meskipun pasti berusaha untuk memastikan pengiriman, log4j tidak menjamin bahwa setiap pernyataan log akan dikirimkan ke tujuannya.

Pro dan Kontra Logging

Logging merupakan komponen penting dari pengembangan perangkat lunak. Kode logging yang ditulis dengan baik menawarkan proses debug yang cepat, perawatan yang mudah, dan penyimpanan terstruktur dari informasi runtime aplikasi.

Logging juga memiliki kekurangan. Itu bisa memperlambat aplikasi. Jika terlalu bertele-tele, dapat menyebabkan kebutaan scrolling. Untuk mengatasi masalah ini, log4j dirancang agar dapat diandalkan, cepat, dan dapat diperluas.

Karena logging jarang menjadi fokus utama aplikasi, API log4j berusaha agar mudah dipahami dan digunakan.

Paket API log4j didistribusikan di bawah Lisensi Perangkat Lunak Apache, lisensi sumber terbuka lengkap yang disertifikasi oleh inisiatif sumber terbuka.

Versi log4j terbaru, termasuk kode sumber lengkap, file kelas, dan dokumentasi dapat ditemukan di http://logging.apache.org/log4j/.

Untuk menginstal log4j di sistem Anda, unduh apache-log4j-xxxtar.gz dari URL yang ditentukan dan ikuti langkah-langkah yang diberikan di bawah ini.

Langkah 1

Unzip dan untar file yang diunduh di / usr / local / direktori sebagai berikut:

$ gunzip apache-log4j-1.2.15.tar.gz
$ tar -xvf apache-log4j-1.2.15.tar
apache-log4j-1.2.15/tests/input/
apache-log4j-1.2.15/tests/input/xml/
apache-log4j-1.2.15/tests/src/
apache-log4j-1.2.15/tests/src/java/
apache-log4j-1.2.15/tests/src/java/org/
.......................................

Meskipun tidak dipasangkan, itu akan membuat hierarki direktori dengan nama apache-log4j-xxx sebagai berikut:

-rw-r--r--  1 root root   3565 2007-08-25 00:09 BUILD-INFO.txt
-rw-r--r--  1 root root   2607 2007-08-25 00:09 build.properties.sample
-rw-r--r--  1 root root  32619 2007-08-25 00:09 build.xml
drwxr-xr-x 14 root root   4096 2010-02-04 14:09 contribs
drwxr-xr-x  5 root root   4096 2010-02-04 14:09 examples
-rw-r--r--  1 root root   2752 2007-08-25 00:09 INSTALL
-rw-r--r--  1 root root   4787 2007-08-25 00:09 KEYS
-rw-r--r--  1 root root  11366 2007-08-25 00:09 LICENSE
-rw-r--r--  1 root root 391834 2007-08-25 00:29 log4j-1.2.15.jar
-rw-r--r--  1 root root    160 2007-08-25 00:09 NOTICE
-rwxr-xr-x  1 root root  10240 2007-08-25 00:27 NTEventLogAppender.dll
-rw-r--r--  1 root root  17780 2007-08-25 00:09 pom.xml
drwxr-xr-x  7 root root   4096 2007-08-25 00:13 site
drwxr-xr-x  8 root root   4096 2010-02-04 14:08 src
drwxr-xr-x  6 root root   4096 2010-02-04 14:09 tests

Langkah 2

Langkah ini opsional dan bergantung pada fitur apa yang akan Anda gunakan dari framework log4j. Jika Anda sudah menginstal paket berikut pada mesin Anda, maka tidak apa-apa, jika tidak, Anda perlu menginstalnya agar log4j berfungsi.

  • JavaMail API:Fitur pembuatan log berbasis email di log4j memerlukan Java Mail API (mail.jar) untuk diinstal pada mesin Anda dari glassfish.dev .

  • JavaBeans Activation Framework: Java Mail API juga akan mengharuskan JavaBeans Activation Framework (activation.jar) diinstal pada mesin Anda dari http://java.sun.com/products/javabeans/jaf/index.jsp.

  • Java Message Service: Fitur log4j yang kompatibel dengan JMS akan mengharuskan JMS dan Java Naming dan Directory Interface JNDI diinstal pada mesin Anda dari http://java.sun.com/products/jms.

  • XML Parser:Anda memerlukan parser XML yang kompatibel dengan JAXP untuk menggunakan log4j. Pastikan Anda menginstal Xerces.jar pada mesin Anda darihttp://xerces.apache.org/xerces-j/install.html.

LANGKAH 3

Sekarang Anda perlu menyiapkan file CLASSPATH dan PATHvariabel dengan tepat. Di sini kita akan mengaturnya hanya untuk file log4j.xxxjar.

$ pwd
/usr/local/apache-log4j-1.2.15
$ export CLASSPATH= \
      $CLASSPATH:/usr/local/apache-log4j-1.2.15/log4j-1.2.15.jar
$ export PATH=$PATH:/usr/local/apache-log4j-1.2.15/

API log4j mengikuti arsitektur berlapis di mana setiap lapisan menyediakan objek yang berbeda untuk melakukan tugas yang berbeda. Arsitektur berlapis ini membuat desain menjadi fleksibel dan mudah dikembangkan di masa mendatang.

Ada dua jenis objek yang tersedia dengan framework log4j.

  • Core Objects:Ini adalah objek wajib dari framework. Mereka diharuskan menggunakan kerangka kerja.

  • Support Objects:Ini adalah objek opsional dari kerangka kerja. Mereka mendukung objek inti untuk melakukan tugas tambahan tetapi penting.

Objek Inti

Objek inti termasuk jenis objek berikut:

Objek Logger

Lapisan tingkat atas adalah Logger yang menyediakan objek Logger. Objek Logger bertanggung jawab untuk menangkap informasi logging dan disimpan dalam hierarki namespace.

Objek Tata Letak

Lapisan tata letak menyediakan objek yang digunakan untuk memformat informasi logging dalam gaya yang berbeda. Ini memberikan dukungan ke objek appender sebelum menerbitkan informasi logging.

Objek tata letak memainkan peran penting dalam menerbitkan informasi logging dengan cara yang dapat dibaca manusia dan dapat digunakan kembali.

Objek Penambah

Ini adalah lapisan tingkat bawah yang menyediakan objek Appender. Objek Appender bertanggung jawab untuk menerbitkan informasi pencatatan ke berbagai tujuan yang disukai seperti database, file, konsol, UNIX Syslog, dll.

Diagram virtual berikut menunjukkan komponen kerangka kerja log4J:

Objek Pendukung

Ada objek penting lainnya dalam kerangka kerja log4j yang memainkan peran penting dalam kerangka kerja logging:

Objek Level

Objek Level mendefinisikan perincian dan prioritas informasi logging apa pun. Ada tujuh level logging yang ditentukan dalam API: OFF, DEBUG, INFO, ERROR, WARN, FATAL, dan ALL.

Objek Filter

Objek Filter digunakan untuk menganalisis informasi pencatatan dan membuat keputusan lebih lanjut tentang apakah informasi itu harus dicatat atau tidak.

Objek Appender dapat memiliki beberapa objek Filter yang terkait dengannya. Jika informasi logging diteruskan ke objek Appender tertentu, semua objek Filter yang terkait dengan Appender itu perlu menyetujui informasi logging sebelum dapat dipublikasikan ke tujuan yang dilampirkan.

ObjectRenderer

Objek ObjectRenderer mengkhususkan diri dalam menyediakan representasi String dari objek berbeda yang diteruskan ke kerangka kerja logging. Objek ini digunakan oleh objek Layout untuk menyiapkan informasi logging akhir.

LogManager

Objek LogManager mengelola kerangka kerja logging. Ini bertanggung jawab untuk membaca parameter konfigurasi awal dari file konfigurasi seluruh sistem atau kelas konfigurasi.

Bab sebelumnya menjelaskan komponen inti log4j. Bab ini menjelaskan bagaimana Anda dapat mengkonfigurasi komponen inti menggunakan file konfigurasi. Mengonfigurasi log4j melibatkan penetapan Level, mendefinisikan Appender, dan menentukan objek Layout dalam file konfigurasi.

File log4j.properties adalah file konfigurasi log4j yang menyimpan properti dalam pasangan nilai-kunci. Secara default, LogManager mencari file bernama log4j.properties diCLASSPATH.

  • Tingkat logger root didefinisikan sebagai DEBUG. DEBUG melampirkan appender bernama X padanya.

  • Setel appender bernama X menjadi appender yang valid.

  • Setel tata letak untuk appender X.

log4j.properties Sintaks:

Berikut adalah sintaks file log4j.properties untuk pelengkap X:

# Define the root logger with appender X
log4j.rootLogger = DEBUG, X

# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender

# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n

Contoh log4j.properties

Menggunakan sintaks di atas, kami mendefinisikan yang berikut ini di file log4j.properties :

  • Tingkat pencatat akar didefinisikan sebagai DEBUG, Penambah DEBUG bernama FILE untuk itu.

  • FILE appender didefinisikan sebagai org.apache.log4j.FileAppender . Ini menulis ke file bernama "log.out" yang terletak dilog direktori.

  • Pola tata letak yang ditentukan adalah % m% n , yang berarti pesan logging yang dicetak akan diikuti oleh karakter baris baru.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Penting untuk diperhatikan bahwa log4j mendukung substitusi variabel gaya UNIX seperti $ {variableName}.

Tingkat Debug

Kami telah menggunakan DEBUG dengan kedua pelengkap. Semua opsi yang memungkinkan adalah:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • ALL

Level-level ini akan dijelaskan di Log4j Logging Levels .

Penambah

Apache log4j menyediakan objek Appender yang terutama bertanggung jawab untuk mencetak pesan pencatatan ke tujuan yang berbeda seperti konsol, file, soket, log kejadian NT, dll.

Setiap objek Appender memiliki properti berbeda yang terkait dengannya, dan properti ini menunjukkan perilaku objek itu.

Properti Deskripsi
tata letak Appender menggunakan objek Layout dan pola konversi yang terkait dengannya untuk memformat informasi logging.
target Targetnya mungkin konsol, file, atau item lain tergantung pada appendernya.
tingkat Level tersebut diperlukan untuk mengontrol penyaringan pesan log.
ambang Appender dapat memiliki level ambang yang terkait dengannya secara independen dari level logger. Appender mengabaikan pesan logging yang memiliki level lebih rendah dari level ambang batas.
Saring Objek Filter dapat menganalisis informasi logging di luar pencocokan level dan memutuskan apakah permintaan logging harus ditangani oleh Appender tertentu atau diabaikan.

Kita dapat menambahkan objek Appender ke Logger dengan memasukkan pengaturan berikut di file konfigurasi dengan metode berikut:

log4j.logger.[logger-name]=level, appender1,appender..n

Anda dapat menulis konfigurasi yang sama dalam format XML sebagai berikut:

<logger name="com.apress.logging.log4j" additivity="false">
   <appender-ref ref="appender1"/>
   <appender-ref ref="appender2"/>
</logger>

Jika Anda ingin menambahkan objek Appender di dalam program Anda, maka Anda dapat menggunakan metode berikut:

public void addAppender(Appender appender);

Metode addAppender () menambahkan Appender ke objek Logger. Seperti yang ditunjukkan oleh konfigurasi contoh, dimungkinkan untuk menambahkan banyak objek Appender ke logger dalam daftar yang dipisahkan koma, masing-masing mencetak informasi logging ke tujuan terpisah.

Kami hanya menggunakan satu FileAppender appender dalam contoh kami di atas. Semua opsi appender yang memungkinkan adalah:

  • AppenderSkeleton
  • AsyncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPAppender
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender

Kami akan membahas FileAppender di Logging in Files dan JDBC Appender akan dibahas dalam Logging in Database .

Tata Letak

Kami telah menggunakan PatternLayout dengan appender kami. Semua opsi yang memungkinkan adalah:

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

Dengan menggunakan HTMLLayout dan XMLLayout, Anda dapat membuat log in HTML dan juga dalam format XML.

Pemformatan Tata Letak

Anda akan belajar bagaimana memformat pesan log di bab: Pemformatan Log .

Kami telah melihat cara membuat file konfigurasi. Bab ini menjelaskan cara membuat pesan debug dan memasukkannya ke dalam file teks sederhana.

Berikut ini adalah file konfigurasi sederhana yang dibuat untuk contoh kami. Mari kita merevisinya sekali lagi:

  • Tingkat pencatat akar didefinisikan sebagai DEBUG dan melampirkan appender bernama FILE padanya.

  • FILE appender didefinisikan sebagai org.apache.log4j.FileAppender dan menulis ke file bernama "log.out" yang terletak di log direktori.

  • Pola tata letak yang ditentukan adalah% m% n, yang berarti pesan logging yang dicetak akan diikuti oleh karakter baris baru.

Isi dari file log4j.properties adalah sebagai berikut:

# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Menggunakan log4j di Program Java

Kelas Java berikut adalah contoh yang sangat sederhana yang menginisialisasi, dan kemudian menggunakan perpustakaan logging Log4J untuk aplikasi Java.

import org.apache.log4j.Logger;

import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Hello this is a debug message");
      log.info("Hello this is an info message");
   }
}

Kompilasi dan Jalankan

Berikut adalah langkah-langkah untuk mengkompilasi dan menjalankan program yang disebutkan di atas. Pastikan Anda telah mengaturPATH dan CLASSPATH dengan tepat sebelum melanjutkan kompilasi dan eksekusi.

Semua perpustakaan harus tersedia di CLASSPATHdan file log4j.properties Anda harus tersedia di PATH. Ikuti langkah-langkah yang diberikan di bawah ini:

  • Buat log4j.properties seperti yang ditunjukkan di atas.

  • Buat log4jExample.java seperti yang ditunjukkan di atas dan kompilasi.

  • Jalankan biner log4jExample untuk menjalankan program.

Anda akan mendapatkan hasil berikut di dalam file /usr/home/log4j/log.out:

Hello this is a debug message
Hello this is an info message

Kelas Logger menyediakan berbagai metode untuk menangani aktivitas logging. Kelas Logger tidak mengizinkan kita untuk membuat instance Logger baru tetapi menyediakan dua metode statis untuk mendapatkan objek Logger:

  • public static Logger getRootLogger();
  • public static Logger getLogger(String name);

Yang pertama dari dua metode mengembalikan pencatat akar instance aplikasi dan tidak memiliki nama.

Instance objek Logger lainnya yang bernama diperoleh melalui metode kedua dengan meneruskan nama logger. Nama logger dapat berupa string apa pun yang dapat Anda berikan, biasanya kelas atau nama paket seperti yang telah kita gunakan di bab terakhir dan disebutkan di bawah ini:

static Logger log = Logger.getLogger(log4jExample.class.getName());

Metode Logging

Setelah kita mendapatkan sebuah instance dari logger bernama, kita dapat menggunakan beberapa metode logger untuk mencatat pesan. Kelas Logger memiliki metode berikut untuk mencetak informasi logging.

Sr Tidak Metode dan Deskripsi
1 public void debug(Object message)

Ini mencetak pesan dengan level Level.DEBUG.

2 public void error(Object message)

Ini mencetak pesan dengan level Level.ERROR.

3 public void fatal(Object message);

Ini mencetak pesan dengan level Level.FATAL.

4 public void info(Object message);

Ini mencetak pesan dengan level Level.INFO.

5 public void warn(Object message);

Ini mencetak pesan dengan level Level.WARN.

6 public void trace(Object message);

Ini mencetak pesan dengan level Level.TRACE.

Semua level ditentukan dalam kelas org.apache.log4j.Level dan salah satu metode yang disebutkan di atas dapat dipanggil sebagai berikut:

import org.apache.log4j.Logger;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   
   public static void main(String[] args) {
      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Ketika Anda mengkompilasi dan menjalankan program LogClass, itu akan menghasilkan hasil sebagai berikut:

Debug Message!
Info Message!
Warn Message!
Error Message!
Fatal Message!

Semua pesan debug lebih masuk akal bila digunakan dalam kombinasi dengan level. Kami akan membahas level di bab berikutnya dan kemudian, Anda akan memiliki pemahaman yang baik tentang cara menggunakan metode ini dalam kombinasi dengan berbagai level debugging.

Kelas org.apache.log4j.Level menyediakan tingkat berikut. Anda juga dapat menentukan level kustom Anda dengan membuat sub-kelas dari kelas Level.

Tingkat Deskripsi
SEMUA Semua level termasuk level kustom.
DEBUG Menunjuk peristiwa informasi mendetail yang paling berguna untuk men-debug aplikasi.
INFO Menunjuk pesan informasional yang menyoroti kemajuan aplikasi pada tingkat yang sangat kasar.
MEMPERINGATKAN Menunjukkan situasi yang berpotensi membahayakan.
KESALAHAN Menunjukkan kejadian kesalahan yang mungkin masih memungkinkan aplikasi untuk terus berjalan.
FATAL Menunjukkan peristiwa kesalahan yang sangat parah yang mungkin akan menyebabkan aplikasi dibatalkan.
MATI Peringkat setinggi mungkin dan dimaksudkan untuk mematikan penebangan.
JEJAK Menunjukkan peristiwa informasi yang lebih detail daripada DEBUG.

Bagaimana Levels Bekerja?

Permintaan log level p di logger dengan level qdiaktifkan jika p> = q. Aturan ini ada di jantung log4j. Ini mengasumsikan bahwa level dipesan. Untuk level standar, kami memiliki SEMUA <DEBUG <INFO <WARN <ERROR <FATAL <OFF.

Contoh berikut menunjukkan bagaimana kita dapat memfilter semua pesan DEBUG dan INFO kita. Program ini menggunakan metode logger setLevel (Level.X) untuk menyetel tingkat logging yang diinginkan:

Contoh ini akan mencetak semua pesan kecuali Debug dan Info:

import org.apache.log4j.*;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   
   public static void main(String[] args) {
      log.setLevel(Level.WARN);

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Saat Anda mengompilasi dan menjalankan program LogClass, itu akan menghasilkan hasil sebagai berikut:

Warn Message!
Error Message!
Fatal Message!

Mengatur Tingkat menggunakan File Konfigurasi

log4j memberi Anda pengaturan level berbasis file konfigurasi yang membebaskan Anda dari mengubah kode sumber ketika Anda ingin mengubah level debugging.

Berikut ini adalah contoh file konfigurasi yang akan melakukan tugas yang sama seperti yang kita lakukan menggunakan metode log.setLevel (Level.WARN) pada contoh di atas.

# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = WARN, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Mari kita gunakan program berikut ini:

import org.apache.log4j.*;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   public static void main(String[] args) {
      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Sekarang kompilasi dan jalankan program di atas dan Anda akan mendapatkan hasil berikut di file /usr/home/log4j/log.out:

Warn Message!
Error Message!
Fatal Message!

Apache log4j menyediakan berbagai objek Tata Letak, yang masing-masing dapat memformat data pencatatan menurut berbagai tata letak. Dimungkinkan juga untuk membuat objek Layout yang memformat data logging dengan cara khusus aplikasi.

Semua objek Layout menerima objek LoggingEvent dari objek Appender. Objek Layout kemudian mengambil argumen pesan dari LoggingEvent dan menerapkan ObjectRenderer yang sesuai untuk mendapatkan representasi String dari pesan tersebut.

Jenis Tata Letak

Kelas tingkat atas dalam hierarki adalah kelas abstrak org.apache.log4j.Layout. Ini adalah kelas dasar untuk semua kelas Tata Letak lainnya di API log4j.

Kelas Layout didefinisikan sebagai abstrak dalam aplikasi, kita tidak pernah menggunakan kelas ini secara langsung; sebagai gantinya, kami bekerja dengan subkelasnya yaitu sebagai berikut:

  • DateLayout

  • HTMLLayout

  • PatternLayout.

  • SimpleLayout

  • XMLLayout

Metode Tata Letak

Kelas ini menyediakan implementasi kerangka dari semua operasi umum di semua objek Layout lainnya dan mendeklarasikan dua metode abstrak.

Sr.No. Metode & Deskripsi
1 public abstract boolean ignoresThrowable()

Ini menunjukkan apakah informasi logging menangani objek java.lang.Throwable apa pun yang diteruskan ke sana sebagai bagian dari peristiwa logging. Jika objek Layout menangani objek Throwable, maka objek Layout tidak mengabaikannya, dan mengembalikan nilai false.

2 public abstract String format(LoggingEvent event)

Subkelas tata letak individual menerapkan metode ini untuk pemformatan khusus tata letak.

Terlepas dari metode abstrak ini, kelas Layout menyediakan implementasi konkret untuk metode yang tercantum di bawah ini:

Sr.No. Metode & Deskripsi
1 public String getContentType()

Ini mengembalikan tipe konten yang digunakan oleh objek Layout. Kelas dasar mengembalikan teks / biasa sebagai tipe konten default.

2 public String getFooter()

Ini menentukan informasi footer dari pesan logging.

3 public String getHeader()

Ini menentukan informasi header dari pesan logging.

Setiap subclass dapat mengembalikan informasi khusus kelas dengan mengesampingkan implementasi konkret dari metode ini.

Untuk menulis informasi logging Anda ke dalam file, Anda harus menggunakan org.apache.log4j.FileAppender .

Konfigurasi FileAppender

FileAppender memiliki parameter yang dapat dikonfigurasi berikut ini:

Properti Deskripsi
segeraFlush Bendera ini secara default disetel ke true, yang berarti aliran keluaran ke file dibilas dengan setiap operasi penambahan.
pengkodean Dimungkinkan untuk menggunakan pengkodean karakter apa pun. Secara default, ini adalah skema encoding khusus platform.
ambang Tingkat ambang untuk appender ini.
Nama file Nama file log.
fileAppend Ini secara default disetel ke true, yang berarti informasi logging ditambahkan ke akhir file yang sama.
bufferedIO Bendera ini menunjukkan apakah kita perlu mengaktifkan penulisan buffer. Secara default, ini disetel ke false.
ukuran buffer Jika I / O buffer diaktifkan, ini menunjukkan ukuran buffer. Secara default, ini diatur ke 8kb.

Berikut ini adalah contoh file konfigurasi log4j.properties untuk FileAppender.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite
log4j.appender.FILE.Append=false

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Jika Anda ingin memiliki file konfigurasi XML yang setara dengan file log4j.properties di atas , berikut isinya:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="FILE" class="org.apache.log4j.FileAppender">
   <param name="file" value="${log}/log.out"/>
   <param name="immediateFlush" value="true"/>
   <param name="threshold" value="debug"/>
   <param name="append" value="false"/>
   <layout class="org.apache.log4j.PatternLayout">
      <param name="conversionPattern" value="%m%n"/>
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="FILE"/>
</logger>

</log4j:configuration>

Anda dapat mencoba log4j - Program Contoh dengan konfigurasi di atas.

Masuk dalam Beberapa File

Anda mungkin ingin menulis pesan log Anda menjadi beberapa file karena alasan tertentu, misalnya, jika ukuran file mencapai ambang tertentu.

Untuk menulis informasi logging Anda ke dalam beberapa file, Anda harus menggunakan kelas org.apache.log4j.RollingFileAppender yang memperluas kelas FileAppender dan mewarisi semua propertinya.

Kami memiliki parameter yang dapat dikonfigurasi berikut selain yang disebutkan di atas untuk FileAppender:

Properti Deskripsi
maxFileSize Ini adalah ukuran kritis dari file yang menjadi tempat file akan diputar. Nilai defaultnya adalah 10 MB.
maxBackupIndex Properti ini menunjukkan jumlah file cadangan yang akan dibuat. Nilai defaultnya adalah 1.

Berikut adalah contoh file konfigurasi log4j.properties untuk RollingFileAppender.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the maximum file size before rollover
log4j.appender.FILE.MaxFileSize=5MB

# Set the the backup index
log4j.appender.FILE.MaxBackupIndex=2

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Jika Anda ingin memiliki file konfigurasi XML, Anda dapat membuat file yang sama seperti yang disebutkan di bagian awal dan hanya menambahkan parameter tambahan yang terkait dengan RollingFileAppender .

Contoh konfigurasi ini menunjukkan bahwa ukuran maksimum yang diizinkan untuk setiap file log adalah 5 MB. Setelah melebihi ukuran maksimum, file log baru akan dibuat. Karena maxBackupIndex didefinisikan sebagai 2, setelah file log kedua mencapai ukuran maksimum, file log pertama akan dihapus dan setelah itu, semua informasi logging akan dikembalikan ke file log pertama.

Anda dapat mencoba log4j - Program Contoh dengan konfigurasi di atas.

Pembuatan File Log Harian

Mungkin ada persyaratan untuk membuat file log Anda setiap hari untuk menyimpan catatan bersih informasi logging Anda.

Untuk menulis informasi logging Anda ke dalam file setiap hari, Anda harus menggunakan kelas org.apache.log4j.DailyRollingFileAppender yang memperluas kelas FileAppender dan mewarisi semua propertinya.

Hanya ada satu parameter penting yang dapat dikonfigurasi selain yang disebutkan di atas untuk FileAppender:

Properti Deskripsi
DatePattern Ini menunjukkan kapan harus menggulung file dan konvensi penamaan yang harus diikuti. Secara default, pergantian dilakukan pada tengah malam setiap hari.

DatePattern mengontrol jadwal rollover menggunakan salah satu pola berikut:

DatePattern Deskripsi
'.' tttt-BB Roll over di akhir setiap bulan dan di awal bulan berikutnya.
'.' tttt-BB-hh Bergulinglah pada tengah malam setiap hari. Ini adalah nilai default.
'.' tttt-BB-hh-a Berguling di tengah hari dan tengah malam setiap hari.
'.' tttt-BB-hh-HH Berguling di bagian atas setiap jam.
'.' tttt-BB-hh-HH-mm Berguling setiap menit.
'.' yyyy-ww Roll over pada hari pertama setiap minggu tergantung pada lokalnya.

Berikut adalah contoh file konfigurasi log4j.properties untuk menghasilkan file log yang bergulir pada tengah hari dan tengah malam setiap hari.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the DatePattern
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Jika Anda ingin memiliki file konfigurasi XML, Anda dapat membuat file yang sama seperti yang disebutkan di bagian awal dan hanya menambahkan parameter tambahan yang terkait dengan DailyRollingFileAppender .

Anda dapat mencoba log4j - Program Contoh dengan konfigurasi di atas.

API log4j menyediakan objek org.apache.log4j.jdbc.JDBCAppender , yang dapat meletakkan informasi pencatatan dalam database yang ditentukan.

Konfigurasi JDBCAppender

Properti Deskripsi
ukuran buffer Menetapkan ukuran buffer. Ukuran default adalah 1.
sopir Set kelas driver ke string yang ditentukan. Jika tidak ada kelas driver yang ditentukan, defaultnya adalah sun.jdbc.odbc.JdbcOdbcDriver.
tata letak Menyetel tata letak yang akan digunakan. Tata letak default adalah org.apache.log4j.PatternLayout.
kata sandi Setel kata sandi database.
sql Menentukan pernyataan SQL yang akan dijalankan setiap kali terjadi peristiwa logging. Ini bisa berupa INSERT, UPDATE, atau DELETE.
URL Menyetel URL JDBC.
pengguna Menyetel nama pengguna database.

Konfigurasi Tabel Log

Sebelum Anda mulai menggunakan logging berbasis JDBC, Anda harus membuat tabel untuk memelihara semua informasi log. Berikut adalah Pernyataan SQL untuk membuat tabel LOGS:

CREATE TABLE LOGS
   (USER_ID VARCHAR(20) NOT NULL,
    DATED   DATE NOT NULL,
    LOGGER  VARCHAR(50) NOT NULL,
    LEVEL   VARCHAR(10) NOT NULL,
    MESSAGE VARCHAR(1000) NOT NULL
   );

Contoh File Konfigurasi

Berikut ini adalah contoh file konfigurasi log4j.properties untuk JDBCAppender yang akan digunakan untuk mencatat pesan ke tabel LOGS.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

Untuk database MySQL, Anda harus menggunakan DBNAME, ID pengguna dan kata sandi yang sebenarnya, di mana Anda telah membuat tabel LOGS. Pernyataan SQL adalah untuk menjalankan pernyataan INSERT dengan nama tabel LOGS dan nilai-nilai yang akan dimasukkan ke dalam tabel.

JDBCAppender tidak membutuhkan tata letak untuk didefinisikan secara eksplisit. Sebaliknya, pernyataan SQL yang diteruskan kepadanya menggunakan PatternLayout.

Jika Anda ingin memiliki file konfigurasi XML yang setara dengan file log4j.properties di atas , berikut isinya:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:mysql://localhost/DBNAME"/>
   <param name="driver" value="com.mysql.jdbc.Driver"/>
   <param name="user" value="user_id"/>
   <param name="password" value="password"/>
   <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>
   <layout class="org.apache.log4j.PatternLayout">
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>

Program Sampel

Kelas Java berikut adalah contoh yang sangat sederhana yang menginisialisasi dan kemudian menggunakan perpustakaan logging Log4J untuk aplikasi Java.

import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Debug");
      log.info("Info");
   }
}

Kompilasi dan Jalankan

Berikut adalah langkah-langkah untuk mengkompilasi dan menjalankan program yang disebutkan di atas. Pastikan Anda telah mengaturPATH dan CLASSPATH dengan benar sebelum melanjutkan kompilasi dan eksekusi.

Semua perpustakaan harus tersedia di CLASSPATHdan file log4j.properties Anda harus tersedia di PATH. Ikuti langkah-langkah yang diberikan:

  • Buat log4j.properties seperti yang ditunjukkan di atas.
  • Buat log4jExample.java seperti yang ditunjukkan di atas dan kompilasi.
  • Jalankan biner log4jExample untuk menjalankan program.

Sekarang periksa tabel LOGS Anda di dalam database DBNAME dan Anda akan menemukan entri berikut:

mysql >  select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED      | LOGGER       | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|         | 2010-05-13 | log4jExample | DEBUG | Debug   |
|         | 2010-05-13 | log4jExample | INFO  | Info    |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

Note:Di sini x digunakan untuk mengeluarkan Nested diagnostic Context (NDC) yang terkait dengan thread yang menghasilkan peristiwa logging. Kami menggunakan NDC untuk membedakan klien dalam komponen sisi server yang menangani banyak klien. Periksa Manual Log4J untuk informasi lebih lanjut tentang ini.