log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,该对象可以将日志信息放入指定的数据库中.
Property | 描述 |
---|---|
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" 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类是一个非常简单的示例,它初始化然后使用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 .
所有库都应该在
创建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手册.