admin
管理员
管理员
  • UID1
  • 粉丝1
  • 关注0
  • 发帖数378
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:1739回复:0

log4j日志记录到数据库

楼主#
更多 发布于:2015-12-16 16:27
log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。


JDBCAppender 配置:

[table=100%,#f7f7f7,#d6d6d6,1,rgb(214, 214, 214)][tr][td=1,1,129]Property[/td][td]描述[/td][/tr][tr][td]bufferSize[/td][td]设置缓冲区的大小。默认大小为1[/td][/tr][tr][td]driver[/td][td]设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcOdbcDriver[/td][/tr][tr][td]layout[/td][td]设置要使用的布局。默认布局是org.apache.log4j.PatternLayout[/td][/tr][tr][td]password[/td][td]Sets the database password.[/td][/tr][tr][td]sql[/td][td]指定SQL语句在每次记录事件发生的时间执行。这可能是INSERT,UPDATE或DELETE[/td][/tr][tr][td]URL[/td][td]设置JDBC URL[/td][/tr][tr][td]user[/td][td]设置数据库用户名[/td][/tr][/table]

图片:sads.JPG




日志表配置:

开始使用基于JDBC日志,要创建在哪里保存日志信息的表。下面是创建日志表的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
   );



配置文件示例:

以下是将用于将消息记录到一个日志表中的示例配置文件 log4j.properties的JDBCAppender
# 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和在其中创建的日志表的数据库密码。SQL语句是使用日志表名和输入值到表,需要执行INSERT语句。
JDBCAppender不需要明确定义的布局。相反,使用PatternLayout 传递给它 SQL语句
如果想拥有相当于上述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");
  }
}



编译和运行:

下面是步骤编译并运行上述程序。确保进行编译和执行之前,适当地设置PATH和CLASSPATH。
所有的库应该在CLASSPATH以及log4j.properties文件应该在PATH可用。所以有以下几点:

  • 创建log4j.properties如上图所示。

  • 创建log4jExample.java如上图所示,并对其进行编译。

  • 执行log4jExample二进制运行程序。
现在检查DBNAME数据库里面日志表,发现下面的条目(记录):
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的手册以获取更多信息。

 

 

 

 

 

 

 

异常中心网是一家专门收集整理程序员编程过程中遇到的常见异常(exception)以及各种异常问答中心的网站。异常中心网旨在,减少程序员在编码遇到异常,处理各种异常时间和痛苦,让程序员能更愉快的、快速的定位异常并查找对应的异常解决方案。异常中心网诚心打造最完美的编程社区为程序员用户服务,努力成为最好的程序员乐园程序员社区程序异常中心程序bug中心异常问答中心

 

喜欢0 评分0
游客

返回顶部