文档章节

log4jdbc数据库访问日志框架使用

cloud-coder
 cloud-coder
发布于 2015/05/27 12:20
字数 877
阅读 3231
收藏 174

log4jdbc官网地址

http://code.google.com/p/log4jdbc/

https://github.com/arthurblake/log4jdbc

当前最新版本是1.2, 支持JDBC3, JDBC4

log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在数据库客户端运行

未使用log4jdbc记录的SQL:

 select count(*) from region where id=?

使用 log4jdbc记录的SQL:

select count(*) from region where id='gz'

log4jdbc特点

  1. 全面支持JDBC 3和JDBC 4!

  2. 容易配置,在大多数情况下,你需要做的是改变驱动类名net.sf.log4jdbc.DriverSpy的,并在前面加上“为jdbc:log4jdbc”到你现有的JDBC URL,建立你的日志记录类别。

    示例:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall

  3. 自动SQL输出。这大大提高了许多情况下的可读性和调试。

  4. 可以打印SQL的执行时间,用来调试SQL的执行效率。

  5. 生成SQL连接数信息,以帮助识别连接池或线程问题。

  6. 底层的JDBC驱动程序的兼容,使用JDK 1.4以上和SLF4J 1.x

log4jdbc设置的logger

logger                 描述
jdbc.sqlonly           仅记录SQL。
jdbc.sqltiming         计时统计SQL的执行用时。
jdbc.audit             记录所有的JDBC调用(ResultSet的除外)。Log量非常大,会影响性能,建议关闭。
                       一般情况下不需要开这个设定,除非追踪一个特定的JDBC问题。
jdbc.resultset         比audit量更大,包括ResultSet对象,记录所有的JDBC记录。建议关闭
jdbc.connection        记录打开和关闭连接以及打开的连接数。用于追踪连接泄漏问题,非常有用。

使用方法

1: 在log4j配置文件中增加对应的logger

2:   改变驱动类名,

        如MYSQL的:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall

        如Derby的:jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase

log4j配置样例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"debug="false">
 <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="conversionPattern" value="%d %p [%c:%L] - %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
	<param name="LevelMin" value="INFO" />
    </filter>
 </appender> 
 <appender name="sql-appender" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${log.dir}/logs/sql.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="sql-timing-appender" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/sqltiming.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="jdbc-appender" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/jdbc.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="jdbc-connection" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/connection.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>

  <!-- log SQL (pre-execution) plus exceptions caused by SQL -->
  <logger name="jdbc.sqlonly" additivity="false">
    <level value="debug"/>
    <appender-ref ref="sql-appender"/>
  </logger>

  <!-- log SQL with timing information, post execution -->
  <logger name="jdbc.sqltiming" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="sql-timing-appender"/>
  </logger>

  <!-- only use the two logs below to trace ALL JDBC information,
       NOTE:  This can be very voluminous!  -->
  <!-- log all jdbc calls except ResultSet calls -->
  <logger name="jdbc.audit" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>

  <!-- log the jdbc ResultSet calls -->
  <logger name="jdbc.resultset" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>
 
  <!-- log connection open/close events and dump of all open connection numbers -->
  <logger name="jdbc.connection" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="connection-appender"/>
  </logger>

  <!-- this log is for internal debugging of log4jdbc, itself -->
  <!-- debug logging for log4jdbc itself -->
  <logger name="log4jdbc.debug" additivity="false">
    <level value="debug"/>
    <appender-ref ref="stdout-appender"/>
  </logger>
<root>
  <level value="info" />
  <appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>

程序调用示例

public class Demo {
    private static Logger log = LoggerFactory.getLogger(Demo.class);


    public static void main(String[] args) throws SQLException {
        log.info("开始");
        Connection conn = DBUtils.getConnection();
        conn.createStatement().execute("select count(*) from xbm_region");
        JdbcUtils.executeQuery("select count(*) from xbm_region where id=?", "xxx");
        log.info("完成");
    }
}


© 著作权归作者所有

cloud-coder
粉丝 247
博文 193
码字总数 141277
作品 0
广州
架构师
私信 提问
加载中

评论(13)

feewo
feewo
官方有更新了
hotsmile
hotsmile
我的log4j是老版本的,配置文件是log4j.property
lanmingle
lanmingle
druid不是也支持么?
cloud-coder
cloud-coder 博主

引用来自“天下归一”的评论

没办跟druid共用呢
druid好嘛,
cloud-coder
cloud-coder 博主

引用来自“水枪首”的评论

这个log4j 2可以这样配置的吗
给示的配置 示例就是log4j的配置呀
cloud-coder
cloud-coder 博主

引用来自“许雷神”的评论

楼主大大 请问这个可以和hiberante或者mybatis整合使用吗?
请自己根据源码封装,看了一下源码,不是很难
许雷神
许雷神
楼主大大 请问这个可以和hiberante或者mybatis整合使用吗?
我要五个字
这个log4j 2可以这样配置的吗
天下归一
天下归一
没办跟druid共用呢
毛毛虫
毛毛虫
赞,下班试试。。。
如何有效地记录 Java SQL 日志?

在常规项目的开发中可能最容易出问题的地方就在于对数据库的处理了,在大部分的环境下,我们对数据库的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各种原因,我们有时会想知...

OneAPM蓝海讯通
2015/09/22
159
1
tomcat7数据库连接池与log4jdbc的配置与试用

博文介绍 刚刚有阅读了一遍江南白衣的springside选型文档 https://github.com/springside/springside4/wiki/Design 发现其中谈到了Log4jdbc这个日志组件 随后,访问了log4jdbc的官网网站,h...

恺哥
2013/08/02
6.9K
3
log4jdbc-log4j2

继续上篇文章log4jdbc-log4j2留下的问题,就是logback日志切分的问题。 上一篇是介绍log4jdbc-log4j2 和log4j的使用,那么这边我就介绍一下log4jdbc-log4j2 和slf4j、logback的结合使用 我们...

无悔这一生
2014/01/24
4.2K
0
正信/log4jdbc-sql

项目中的SQL语句报错,有时实在不太明显,也没有能够记录执行时间的,所以找到log4jdbc,但是,配置项太多,输出格式不合要求,log4j2集成无法输出日志还是比较头大。今天把源码看了遍,部分地...

正信
2017/05/04
0
0
OSChina 开源周刊第36期 —— Go 摆脱了 C,又惹上了 Java

每周技术抢先看,总有你想要的! 开源资讯 Go 摆脱了 C,又惹上了 Java? 携程解释瘫痪原因:员工错误操作 删除执行代码 Git@OSC 平台遭受 DDoS 攻击 Fedora 22 正式版发布下载 开源中国 iP...

OSC编辑部
2015/05/31
5.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx主备模式笔记

(1)两台服务器 192.168.17.129 和 192.168.17.131 (2)在两台服务器安装 keepalived 安装 keepalived (1)使用 yum 命令进行安装 yum install keepalived –y (2)安装之后,在 etc 里面...

行者终成事
今天
4
0
004-Docker镜像

Docker镜像 一个通用的私有仓库,可以提升效率 Docker镜像构建分为两种,一种是手动构建,一种是Dockerfile(自动构建) 基于centos镜像构建手动制作nginx镜像 docker run --name testdocker -...

伟大源于勇敢的开始
今天
5
0
OSChina 周一乱弹 —— 我就加班,不去世不休息

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《For Forever》90后那些小鲜肉歌手中,好像只有花花的歌能吸引我,这小家伙对音乐的感觉真是天才一般!#今日歌曲推荐# 《For F...

小小编辑
今天
9
1
【领会要领】web前端-轻量级框架应用(jQuery基础)

作者 | Jeskson 来源 | 达达前端小酒馆 jquery的安装和语法,jquery的多种选择器,dom操作和jquery事件。 jQuery框架,简介,优势,安装,语法,jQuery选择器,id选择器,类选择器,标记选择...

达达前端小酒馆
今天
6
0
MySQL 常用命令

无须死记硬背,直接 copy 就好。 1. 查看目前 mysql 用户 select user,host,password from mysql.user; 2. 修改 root 密码(使用内置函数修改) set password for root@localhost=password('y......

HuaiAnGG
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部