log4j - Đăng nhập vào Cơ sở dữ liệu

API log4j cung cấp org.apache.log4j.jdbc.JDBCAppender đối tượng, có thể đưa thông tin ghi nhật ký vào một cơ sở dữ liệu cụ thể.

Cấu hình JDBCAppender

Bất động sản Sự miêu tả
bufferSize Đặt kích thước bộ đệm. Kích thước mặc định là 1.
người lái xe Đặt lớp trình điều khiển thành chuỗi được chỉ định. Nếu không có lớp trình điều khiển nào được chỉ định, nó sẽ mặc định làsun.jdbc.odbc.JdbcOdbcDriver.
bố trí Đặt bố cục sẽ được sử dụng. Bố cục mặc định làorg.apache.log4j.PatternLayout.
mật khẩu Đặt mật khẩu cơ sở dữ liệu.
sql Chỉ định câu lệnh SQL được thực thi mỗi khi sự kiện ghi nhật ký xảy ra. Đây có thể là CHÈN, CẬP NHẬT hoặc XÓA.
URL Đặt URL JDBC.
người dùng Đặt tên người dùng cơ sở dữ liệu.

Cấu hình bảng nhật ký

Trước khi bắt đầu sử dụng ghi nhật ký dựa trên JDBC, bạn nên tạo một bảng để duy trì tất cả thông tin nhật ký. Sau đây là câu lệnh SQL để tạo bảng 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
   );

Tệp cấu hình mẫu

Sau đây là tệp cấu hình mẫu log4j.properties cho JDBCAppender sẽ được sử dụng để ghi thông báo vào bảng 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

Đối với cơ sở dữ liệu MySQL, bạn sẽ phải sử dụng DBNAME, ID người dùng và mật khẩu thực, nơi bạn đã tạo bảng LOGS. Câu lệnh SQL là thực thi một câu lệnh INSERT với tên bảng LOGS và các giá trị được nhập vào bảng.

JDBCAppender không cần bố cục được định nghĩa rõ ràng. Thay vào đó, câu lệnh SQL được chuyển tới nó sử dụng một PatternLayout.

Nếu bạn muốn có tệp cấu hình XML tương đương với tệp trên log4j.properties thì đây là nội dung -

<?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>

Chương trình mẫu

Lớp Java sau đây là một ví dụ rất đơn giản khởi tạo và sau đó sử dụng thư viện ghi nhật ký Log4J cho các ứng dụng 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");
   }
}

Biên dịch và Thực thi

Dưới đây là các bước để biên dịch và chạy chương trình nói trên. Đảm bảo rằng bạn đã thiết lậpPATHCLASSPATH một cách thích hợp trước khi tiến hành biên dịch và thực thi.

Tất cả các thư viện sẽ có sẵn trong CLASSPATHvà tệp log4j.properties của bạn sẽ có sẵn trong PATH. Làm theo các bước đã cho -

  • Tạo log4j.properties như hình trên.
  • Tạo log4jExample.java như được hiển thị ở trên và biên dịch nó.
  • Thực thi nhị phân log4jExample để chạy chương trình.

Bây giờ, hãy kiểm tra bảng LOGS của bạn bên trong cơ sở dữ liệu DBNAME và bạn sẽ tìm thấy các mục sau:

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- Ở đây x được sử dụng để xuất ra Ngữ cảnh chẩn đoán lồng nhau (NDC) được liên kết với chuỗi đã tạo ra sự kiện ghi nhật ký. Chúng tôi sử dụng NDC để phân biệt máy khách trong các thành phần phía máy chủ xử lý nhiều máy khách. Kiểm tra Sổ tay hướng dẫn sử dụng Log4J để biết thêm thông tin về điều này.