log4j教程 12、日志记录到数据库
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教程 12、日志记录到数据库的更多相关文章
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- 也用 Log4Net 之将日志记录到数据库的配置 (一)
也用 Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需 ...
- java注解日志记录到数据库
1. pom添加依赖包 <!--添加aop依赖--><dependency> <groupId>org.springframework.boot</group ...
- Log4Net 之将日志记录到数据库的后台实现 (二)
原文:Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之前 ...
- Log4Net 之将日志记录到数据库的配置 (一)
原文:Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要 ...
- log4j日志记录到数据库
log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...
- log4j 将日志记录到数据库
需要以下jar包: ---log4j commons-loggin-1.1.1.jar log4j-1.2.16.jar ---mysql mysql-connector-java-5.1.15-bi ...
- log4j配置生成日志保存在数据库
利用MDC可以存储参数,MDC原理:相当于一个map将值存储起来,调用时可以根据key将自定义的在值存入对应位置(数据库或文件等).使用: 配置文件:log4j.properties ### dire ...
- 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)
http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...
随机推荐
- 【普通の惨败】GDOI2015卖萌记
前记:这次可真的全程卖萌了.... Day 0 早早坐上前往广州的火车,然后转车到韶关 然后就到了偏远郊区的(准)四星酒店 周围连路灯都没有,极其僻静极其荒凉 大家都极其安静地回到自己房间复习 这一天 ...
- Gcd反应堆 (pgcd)
Gcd反应堆 (pgcd) 题目描述 不知什么时候起,TA突然对gcd产生了浓厚的兴趣,于是他为此编写了个程序,输入分别不大于m,n (1<m,n<=10^7)的两个数,就能得出gcd(m ...
- 如何得到一个接口所有的实现类(及子接口)?例如:Eclipse IDE
(一)Eclipse IDE的做法 它会解析所有的Java文件.Class文件. 技巧:在Eclipse中,选中Interface,按下F4,就可以查看到所有的实现类及子接口. 例如: (二)自己怎么 ...
- (转)Ant使用例子
文章来自:http://www.blogjava.net/feng0801/archive/2014/07/29/416297.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实现 ...
- 类复制 MemberwiseClone与Clone(深 浅 Clone)
MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象.如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型,则复制引用但 ...
- 每天一个小算法(insertion sort3)
今天多看看插入排序的理论部分. 先贴几个概念吧: 1.伪代码(英语:pseudocode),又称为虚拟代码,是高层次描述算法的一种方法.它不是一种现实存在的编程语言(已经出现了类似伪代码的语言,参见N ...
- 口红游戏 插口红游戏 h5页面开发
目前火热的口红机游戏,需要在设备前参与,然后成功后即可赢得口红,作为平台运营者来说还是比较重资产的,目前我们将它搬到了线上.每个人都可以远程玩这样的口红机游戏了.直接在手机微信里试玩,成功后,后台即可 ...
- Linux/unix inode
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...
- vim编辑器快捷运用
vim下可以使用常用的箭头键 但是 还有其它键可以让你更快的达到目标 hjkl 这是代替箭头键功能的 H M L 跳到屏幕的顶上 中间 下方 w 跳到下一个单词的开始e 跳到单词的结束b 向后跳 gg ...
- C# 使用文件流来读写ini文件
背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI封装的help类,用起来倒也顺手. ...