- log4j 教程
- log4j - 首页
- log4j - 概述
- log4j - 安装
- log4j - 架构
- log4j - 配置
- log4j - 示例程序
- log4j - 日志记录方法
- log4j - 日志级别
- log4j - 日志格式
- log4j - 文件日志记录
- log4j - 数据库日志记录
- log4j 有用资源
- log4j - 常见问题解答
- log4j - 快速指南
- log4j - 有用资源
- log4j - 讨论
log4j - 数据库日志记录
log4j API 提供了 **org.apache.log4j.jdbc.JDBCAppender** 对象,该对象可以将日志信息放入指定的数据库中。
JDBCAppender 配置
| 属性 | 描述 |
|---|---|
| bufferSize | 设置缓冲区大小。默认大小为 1。 |
| driver | 将驱动程序类设置为指定的字符串。如果未指定驱动程序类,则默认为 **sun.jdbc.odbc.JdbcOdbcDriver**。 |
| layout | 设置要使用的布局。默认布局为 **org.apache.log4j.PatternLayout**。 |
| password | 设置数据库密码。 |
| sql | 指定每次发生日志事件时要执行的 SQL 语句。这可能是 INSERT、UPDATE 或 DELETE。 |
| 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
);
示例配置文件
以下是一个用于 JDBCAppender 的示例配置文件 **log4j.properties**,它将用于将消息记录到 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:///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
对于 MySQL 数据库,您需要使用实际的 DBNAME、用户 ID 和密码,您已在其中创建了 LOGS 表。SQL 语句是要执行一个 INSERT 语句,表名为 LOGS,以及要输入表中的值。
JDBCAppender 不需要显式定义布局。相反,传递给它的 SQL 语句使用 PatternLayout。
如果您希望拥有一个与上述 **log4j.properties** 文件等效的 XML 配置文件,则以下是其内容:
<?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:///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>
示例程序
以下 Java 类是一个非常简单的示例,它初始化然后使用 Log4J 日志记录库用于 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");
}
}
编译和执行
以下是编译和运行上述程序的步骤。在继续进行编译和执行之前,请确保您已正确设置了 **PATH** 和 **CLASSPATH**。
所有库都应在 **CLASSPATH** 中可用,并且您的 log4j.properties 文件应在 PATH 中可用。请按照以下步骤操作:
- 创建如上所示的 log4j.properties。
- 创建如上所示的 log4jExample.java 并编译它。
- 执行 log4jExample 二进制文件以运行程序。
现在检查 DBNAME 数据库中的 LOGS 表,您将找到以下条目:
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)
**注意** - 这里 x 用于输出与生成日志事件的线程关联的嵌套诊断上下文 (NDC)。我们使用 NDC 来区分处理多个客户端的服务器端组件中的客户端。有关此内容的更多信息,请查看 Log4J 手册。
广告