# Log4j `JDBCAppender` – 在数据库中创建日志

> 原文： [https://howtodoinjava.com/log4j/how-to-create-logs-in-database-using-jdbcappender-in-log4j/](https://howtodoinjava.com/log4j/how-to-create-logs-in-database-using-jdbcappender-in-log4j/)

[Log4j](//howtodoinjava.com/category/frameworks/log4j/ "log4j tutorials") 是一个简单而灵活的日志记录框架。 日志记录为开发人员提供了有关应用故障的详细上下文。 使用 log4j 可以在运行时启用日志记录，而无需修改应用二进制文件。 log4j 包的设计目的是使这些语句可以保留在出厂代码中，而不会造成高昂的性能成本。

Log4j 带有多个选项来格式化框架创建的日志文件。 它也可以创建简单的日志文件，html 日志文件或 xml 日志文件。 它还使用 mysql 语句将日志语句插入数据库。

这篇文章，我将展示用于配置 log4j 以在数据库表中生成日志的示例代码。

**步骤 1）创建一个 Maven Java 项目并更新 log4j 依赖项**

请遵循与[**使用 maven 配置 log4j**](//howtodoinjava.com/log4j/how-to-configure-log4j-using-maven/ "How to configure log4j using maven") 有关的步骤。

**步骤 2）在`log4j.properties`文件中配置`JDBCAppender`**

[`JDBCAppender`](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jdbc/JDBCAppender.html "JDBCAppender")提供了用于将日志事件发送到数据库表的机制。 每个追加调用将添加到`ArrayList`缓冲区。 当缓冲区已满时，每个日志事件都将放置在 sql 语句（可配置）中并执行。 **缓冲区大小**， **DB URL**，**用户**和**密码**是标准 log4j 方式中的可配置选项。

**警告**：此版本的`JDBCAppender`将来很可能会完全替换。 此外，它不会记录异常。

```java
# Define the root logger with file appender
log4j.rootLogger = DEBUG, sql

# Define the file appender
log4j.appender.sql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.sql.URL=jdbc:mysql://localhost/test
# Set Database Driver
log4j.appender.sql.driver=com.mysql.jdbc.Driver
# Set database user name and password
log4j.appender.sql.user=root
log4j.appender.sql.password=password
# Set the SQL statement to be executed.
log4j.appender.sql.sql=INSERT INTO LOGS VALUES ('%x', now() ,'%C','%p','%m')
# Define the xml layout for file appender
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
```

**步骤 3）在数据库中创建表并测试应用**

在模式测试中，创建数据库表`LOGS`。

```java
CREATE TABLE LOGS
(
	USER_ID VARCHAR(20) NOT NULL,
	DATED   DATETIME NOT NULL,
	LOGGER  VARCHAR(50) NOT NULL,
	LEVEL   VARCHAR(10) NOT NULL,
	MESSAGE VARCHAR(1000) NOT NULL
);
```

现在，使用`PropertyConfigurator`配置`log4j.properties`文件并调用一些日志事件。

```java
package com.howtodoinjava;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jJDBCExample
{
	static Logger log = Logger.getLogger(Log4jJDBCExample.class);

	public static void main(String[] args)
	{
		PropertyConfigurator.configure("log4j.properties");

		log.debug("Sample debug message");
		log.info("Sample info message");
		log.error("Sample error message");
		log.fatal("Sample fatal message");
	}
}

```

日志语句将使用 sql 语句插入数据库中。

![log4j-jdbc-example](img/b26c3f327b3e08101fc41cf2a1a1b507.png)

让我知道是否有任何问题。

**祝您学习愉快！**