log4j - Masuk ke Database

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

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 adalahsun.jdbc.odbc.JdbcOdbcDriver.
tata letak Menyetel tata letak yang akan digunakan. Tata letak default adalahorg.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 ini 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 di atas log4j.properties file, lalu inilah 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.