日志格式(Log Formatting)
优质
小牛编辑
127浏览
2023-12-01
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://localhost/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。
如果您希望XML配置文件等同于上面的log4j.properties文件,那么这里是内容 -
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="DB">
<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>
</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 binary来运行程序。
现在检查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)
Note - 此处x用于输出与生成日志记录事件的线程关联的嵌套诊断上下文(NDC)。 我们使用NDC来区分处理多个客户端的服务器端组件中的客户端。 有关详细信息,请查看Log4J手册。