Log4j DB Appender – Ghi log vào – ra dababase sử dụng Log4j

Log4j DB Appender – Ghi log vào – ra dababase sử dụng Log4j

 

Log4j DB Appender

Ở bài trước chúng ta đã tìm hiểu File Appender và Console Appender (ghi log ra file và ghi log ra màn hình console)

DB Appender cũng thưc hiện tương tự, tuy nhiên nó sẽ có thêm bước connect tới database, mỗi khi thực hiện ghi log, Log4j sẽ gửi 1 câu lệnh insert để insert thông tin log vào database.

 

Tạo database để lưu trữ thông tin log

Ở đây mình sử dụng MySQL (xem lại cách cài đặt MySQL tại đây)

Tạo database với name là demo_log4j

CREATE SCHEMA `demo_log4j` ;

Tạo table logger để lưu các bản ghi log

thông tin lưu trữ log gồm có id, thời gian ghi log, class + method nơi thực hiện ghi log, level log, message log.

CREATE TABLE `demo_log4j`.`logger` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `datetime` TIMESTAMP(0) NULL,
  `method_name` VARCHAR(255) NULL,
  `level` VARCHAR(10) NULL,
  `message` VARCHAR(1000) NULL,
  PRIMARY KEY (`id`));

Log4j DB Appender - Ghi log vào - ra dababase sử dụng Log4j

Code Demo:

project-log4j-db-appender

Thư viện sử dụng:

Ở mình mình sử dụng database MySQL do đó mình sẽ cần phải khai báo thư viện mysql-connector-java.

Nếu các bạn sử dụng hệ quản trị cơ sở dữ liệu khác như PostgreSQL, DB2… thì chỉ cần thay thư viện jdbc tương ứng là được.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>stackjava.com</groupId>
  <artifactId>Log4j</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.34</version>
    </dependency>
  </dependencies>
</project>

Config log4j:

## Show error log + info log + debug log and output to database
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:3306/demo_log4j
# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver
# Set database user name and password
log4j.appender.DB.user=root
log4j.appender.DB.password=admin1234
# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO `logger` (`datetime`, `method_name`, `level`, `message`) VALUES ('%d{yyyy-MM-dd HH:mm:ss}','%C %M', '%p', '%m');

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

Lưu ý phần datetime, chúng ta cần phải để dúng định dạng datatime thích hợp mà database sẽ lưu

Phần log4j.rootLogger thì chúng ta sẽ thêm giá trị DB;

package stackjava.com.log4j.demo;

import org.apache.log4j.Logger;

public class Demo {
  private static final Logger logger = Logger.getLogger(Demo.class);

  public static void main(String[] args) {
    logger.debug("debug log");
    logger.error("error log");
    logger.info("info log");
  }
}

Kết quả:

log4j demo database appender

 

Okay, Done! Log4j DB Appender – Ghi log vào – ra dababase sử dụng Log4j

Các bạn có thể download code ví dụ trên tại đây

 

References:

https://logging.apache.org/log4j/extras/apidocs/org/apache/log4j/DBAppender.html

stackjava.com