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`));
Code Demo:
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ả:
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