教程 > Log4j 教程 > Log4j 基础 阅读:28

Log4j 日志存储到数据库

log4j API 提供了 org.apache.logging.log4j.jdbc.JDBCAppender 对象,它可以将日志信息放在指定的数据库中。

JDBCAppender 配置

属性 描述
bufferSize 设置缓冲区大小。 默认大小为 1。
driver 将驱动程序类设置为指定的字符串。 如果未指定驱动程序类,则默认为 sun.jdbc.odbc.JdbcOdbcDriver
layout 设置要使用的布局。 默认布局是 org.apache.logging.log4j.PatternLayout
password 设置数据库密码。
sql 指定每次发生日志记录事件时要执行的 SQL 语句。 这可以是 INSERTUPDATEDELETE
URL 设置 JDBC URL。
user 设置数据库用户名。

日志表配置

在开始使用基于 JDBC 的日志记录之前,我们应该创建一个表来维护所有日志信息。 以下是创建 LOGS 表的 SQL 语句

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
);

简单的配置文件

对于 MySQL 数据库,我们必须使用创建 logs 表的实际 DBNAME、用户 ID 和密码。 SQL 语句是执行一个 INSERT 语句,表名 LOGS 和要输入到表中的值。

JDBCAppender 不需要显式定义布局。 相反,传递给它的 SQL 语句使用 PatternLayout。

如果我们希望拥有与 log4j2.properties 文件等效的 XML 配置文件,那么这里是内容

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

<appender name="DB" class="org.apache.logging.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.logging.log4j.PatternLayout">
   </layout>
</appender>

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

</Configuration>

下面的 Java 类是一个非常简单的示例,它初始化并使用用于 Java 应用程序的 Log4J 日志库。

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

public class log4jExample{
   static Logger logger = LogManager.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
                logger.debug("Debug");
                logger.info("Info");
   }
}

编译执行

以下是编译和运行上述程序的步骤。 在继续编译和执行之前,请确保你已正确设置 PATH 和 CLASSPATH。

所有库都应该在 CLASSPATH 中可用,并且我们的 log4j2.xml 文件应该在 PATH 中可用。 按照给定的步骤

  • 如上所示创建 log4j2.xml。
  • 如上所示创建 log4jExample.java 并编译它。
  • 执行 log4jExample 二进制文件来运行程序。
  • 现在检查 DBNAME 数据库中的 logs 表,你会发现以下条目
mysql > select * from logs;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED | LOGGER | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
| | 2022-05-29 | log4jExample | DEBUG | Debug |
| | 2022-05-29 | log4jExample | INFO | Info |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

注意 - 这里 x 用于输出与生成日志事件的线程关联的嵌套诊断上下文 (NDC)。 我们使用 NDC 来区分处理多个客户端的服务器端组件中的客户端。 查看 Log4J 手册以获取更多信息。

查看笔记

扫码一下
查看教程更方便