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。
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。

如果您希望拥有一个与上述 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://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.log4j.PatternLayout">
   </layout>
</appender>

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

</log4j:configuration>

示例程序

以下Java类是一个非常简单的示例,该示例初始化Java应用程序的Log4J日志记录库,然后使用它。

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

编译执行

这是编译和运行上述程序的步骤。在继续进行编译和执行之前,请确保已正确设置了 PATHCLASSPATH

所有库都应该在 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手册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值