log4j日志记录到数据库

转载 2015年11月18日 17:15:46

log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库。

JDBCAppender 配置:

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

日志表配置:

开始使用基于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的手册以获取更多信息。

Log4j记录日志到数据库的一个实例

log4j的配置 #log4j.rootLogger=error,stdout,info,debug,error log4j.rootCategory=info,stdout,database l...
  • xxssyyyyssxx
  • xxssyyyyssxx
  • 2017年03月12日 12:47
  • 2124

log4j将记录日志保存到数据库

一、前提条件 系统必须是使用LOG4J进行日志管理,否则方法无效。 系统必须包含commons-logging-xxx.jar,log4j-xxx.jar这两个JAR包,XXX为版本号。 二、操作步骤...
  • Truong
  • Truong
  • 2014年07月01日 16:45
  • 3528

使用log4j将日志信息写入数据库中

一直都在想如何用log4j将message写到数据库中,在以后查看的时候会方便些。(数据库都是使用MSSQL)在网上搜了下, 有两种方法比较合适。1.插入数据库中的表的字段有多个(不包括自动增长列),...
  • gaozhi0
  • gaozhi0
  • 2008年02月11日 14:56
  • 2108

Spring Mvc那点事---(42)SSM使用log4j2记录日志到mysql数据库

 引子 在系统开发运行过程中,大多数情况下,把日志都记录到系统文件中,但是有一些重要的日志或者信息,需要记录到数据库中。可以根据日志的重要程度,选择相应的级别将日志信息记录到数据库中。log4...
  • zx13525079024
  • zx13525079024
  • 2016年11月16日 14:47
  • 2284

Spring Mvc那点事---(41)SSM使用log4j2记录日志

现在项目开发中,越来越多使用log4j2来记录日志,log4j2比log4更方便,更快捷,效率更高,更加灵活。使用log4j2需要引入log4j-api-xxx.jar和log4j-core-xxxx...
  • zx13525079024
  • zx13525079024
  • 2016年11月16日 14:39
  • 3450

commons-logging+log4j 进行ssm日志输出

啊啊啊 困扰很久的日志终于解决了,兴奋之余整理一下: 参考链接:commons-logging与logj的特点 这篇文章已经把commons-logging和log4j单独使用的方式以及各个的优缺...
  • Artoro
  • Artoro
  • 2018年01月04日 14:20
  • 26

log4j将记录日志保存到数据库

log4j将记录日志保存到数据库  1、创建日志表 要把日志持久化,必须在数据库中创建一张用来存储日志信息的表,表内字段为日志 的一个主要属性包括:操作类,执行方法,打印时间,日志级别,日志内容。...
  • u013179690
  • u013179690
  • 2015年06月12日 10:55
  • 2471

Log4j2记录日志到数据库(MySQL&MongoDB)

【摘要】     本文主要介绍Log4j2记录日志到MySQL和MongoDB数据库,用简单的例子来讲解,并解决了一些官方配置可能出现的错误。具体内容可参见官方文档:http://logging...
  • z69183787
  • z69183787
  • 2016年10月25日 17:56
  • 1876

如何配置log4j2日志记录至数据库

log4j2日志写表
  • pdw2009
  • pdw2009
  • 2016年02月03日 11:32
  • 2496

log4j使用与java中log4j记录日志如何写入数据库

  • 2010年07月12日 16:37
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:log4j日志记录到数据库
举报原因:
原因补充:

(最多只允许输入30个字)