📜  log4j-登录数据库

📅  最后修改于: 2020-11-12 05:52:34             🧑  作者: Mango


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

JDBCAppender配置

Property Description
bufferSize Sets the buffer size. Default size is 1.
driver Sets the driver class to the specified string. If no driver class is specified, it defaults to sun.jdbc.odbc.JdbcOdbcDriver.
layout Sets the layout to be used. Default layout is org.apache.log4j.PatternLayout.
password Sets the database password.
sql Specifies the SQL statement to be executed every time a logging event occurs. This could be INSERT, UPDATE, or DELETE.
URL Sets the JDBC URL.
user Sets the database user name.

日志表配置

在开始使用基于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配置文件,那么这里的内容-






   
   
   
   
   
   
   
   



   
   



样例程序

以下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手册。