<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; sqlinform</title>
	<atom:link href="https://blog.gmem.cc/tag/sqlinform/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Wed, 15 Apr 2026 13:29:39 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>使用log4jdbc记录SQL语句的执行情况</title>
		<link>https://blog.gmem.cc/log4jdbc</link>
		<comments>https://blog.gmem.cc/log4jdbc#comments</comments>
		<pubDate>Fri, 11 Jan 2013 01:48:21 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[LOG]]></category>
		<category><![CDATA[sqlinform]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1200</guid>
		<description><![CDATA[<p>在进行数据库开发时，我们经常需要监测SQL语句的执行情况，一般的手工编码记录、Hibernate日志记录，有如下的缺点： 人工记录太麻烦，需要写很多日志记录语句 无法获取PreparedStatement的传入参数，只能显示为"?" &#160; log4jdbc这个小组件，恰恰解决了这些问题，其官网地址为：log4jdbc网站 该组件具有针对jdbc3、jdbc4的不同版本，如果你使用JDK1.4、1.5，可以使用log4jdbc3，使用JDK1.6以上，可以使用log4jdbc4。同时，log4jdbc需要日志记录框架的支持，建议使用SLF4J和Log4j的组合。 使用log4jdbc时，你需要更改数据源的JDBC URL，添加前缀：jdbc:log4jdbc:，同时，要把JDBC驱动类改为net.sf.log4jdbc.DriverSpy。例如，对于MySQL，情况可能像下面这样： [crayon-69e0363aa326d811738693/] log4jdbc根据JDBC URL猜测你用的是哪一种数据库，并按下表确定真实的JDBC驱动类 驱动类名 数据库类型 oracle.jdbc.driver.OracleDriver Older Oracle Driver oracle.jdbc.OracleDriver Newer Oracle Driver com.sybase.jdbc2.jdbc.SybDriver <a class="read-more" href="https://blog.gmem.cc/log4jdbc">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/log4jdbc">使用log4jdbc记录SQL语句的执行情况</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><p>在进行数据库开发时，我们经常需要监测SQL语句的执行情况，一般的手工编码记录、Hibernate日志记录，有如下的缺点：</p>
<ol>
<li>人工记录太麻烦，需要写很多日志记录语句</li>
<li>无法获取PreparedStatement的传入参数，只能显示为"?"</li>
</ol>
<p>&nbsp;</p>
<p>log4jdbc这个小组件，恰恰解决了这些问题，其官网地址为：<a href="http://code.google.com/p/log4jdbc/" target="_blank">log4jdbc网站</a><br />
该组件具有针对jdbc3、jdbc4的不同版本，如果你使用JDK1.4、1.5，可以使用log4jdbc3，使用JDK1.6以上，可以使用log4jdbc4。同时，log4jdbc需要日志记录框架的支持，建议使用SLF4J和Log4j的组合。</p>
使用log4jdbc时，你需要更改数据源的JDBC URL，添加前缀：<span style="color: #008080;"><strong>jdbc:log4jdbc:</strong></span>，同时，要把JDBC驱动类改为net.sf.log4jdbc.DriverSpy。例如，对于MySQL，情况可能像下面这样：<br />
<pre class="crayon-plain-tag">#标准的JDBC URL
mysql://192.168.0.201:3306/gmem
#使用log4jdbc时的URL
jdbc:log4jdbc:mysql://192.168.0.201:3306/gmem

#标准的JDBC驱动类名
com.mysql.jdbc.Driver
#使用log4jdbc时的驱动类名
net.sf.log4jdbc.DriverSpy</pre><br />
log4jdbc根据JDBC URL猜测你用的是哪一种数据库，并按下表确定真实的JDBC驱动类
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td style="text-align: center;"><b>驱动类名</b></td>
<td style="text-align: center;"><b>数据库类型</b></td>
</tr>
</thead>
<tbody>
<tr>
<td>oracle.jdbc.driver.OracleDriver</td>
<td>Older Oracle Driver</td>
</tr>
<tr>
<td>oracle.jdbc.OracleDriver</td>
<td>Newer Oracle Driver</td>
</tr>
<tr>
<td>com.sybase.jdbc2.jdbc.SybDriver</td>
<td>Sybase</td>
</tr>
<tr>
<td>net.sourceforge.jtds.jdbc.Driver</td>
<td>jTDS SQL Server &amp; Sybase driver</td>
</tr>
<tr>
<td>com.microsoft.jdbc.sqlserver.SQLServerDriver</td>
<td>Microsoft SQL Server 2000 driver</td>
</tr>
<tr>
<td>com.microsoft.sqlserver.jdbc.SQLServerDriver</td>
<td>Microsoft SQL Server 2005 driver</td>
</tr>
<tr>
<td>weblogic.jdbc.sqlserver.SQLServerDriver</td>
<td>Weblogic SQL Server driver</td>
</tr>
<tr>
<td>com.informix.jdbc.IfxDriver</td>
<td>Informix</td>
</tr>
<tr>
<td>org.apache.derby.jdbc.ClientDriver</td>
<td>Apache Derby client/server driver, aka the Java DB</td>
</tr>
<tr>
<td>org.apache.derby.jdbc.EmbeddedDriver</td>
<td>Apache Derby embedded driver, aka the Java DB</td>
</tr>
<tr>
<td>com.mysql.jdbc.Driver</td>
<td>MySQL</td>
</tr>
<tr>
<td>org.postgresql.Driver</td>
<td>PostgresSQL</td>
</tr>
<tr>
<td>org.hsqldb.jdbcDriver</td>
<td>HSQLDB pure Java database</td>
</tr>
<tr>
<td>org.h2.Driver</td>
<td>H2 pure Java database</td>
</tr>
</tbody>
</table>
你需要在配置日志记录框架的配置来改变log4jdbc需要记录哪些内容，以log4j为例：<br />
<pre class="crayon-plain-tag">#下面的配置仅仅记录ERROR级别的日志，开发时可以适当改为DEBUG
#只记录执行的SQL语句，PreparedStatement的输入参数自动替换“?”
log4j.logger.jdbc.sqlonly=ERROR
#记录执行的SQL语句，并统计其消耗时间
log4j.logger.jdbc.sqltiming=ERROR
#记录所有JDBC的调用（针对ResultSet的除外）
log4j.logger.jdbc.audit=ERROR
#记录针对ResultSet的所用JDBC调用
log4j.logger.jdbc.resultset=ERROR
#记录数据库连接的打开和关闭，可以用于监控连接泄漏
log4j.logger.jdbc.connection=ERROR</pre><br />
此外，你可以 log4jdbc.properties这个文件中设置下表的配置项，来改变log4jdbc的行为：
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center;"><b>配置项</b></td>
<td style="width: 90px; text-align: center;"><b>默认值</b></td>
<td style="text-align: center;"><b>描述</b></td>
<td style="width: 90px; text-align: center;"><b>开始版本</b></td>
</tr>
<tr>
<td>log4jdbc.drivers</td>
<td></td>
<td>一个或者多个JDBC驱动的全限定类名，逗号分隔，一般用不到该配置</td>
<td>1.0</td>
</tr>
<tr>
<td>log4jdbc.auto.load.popular.drivers</td>
<td>true</td>
<td>如果设置为false，则不会自动加载上表所属的常用驱动类</td>
<td>1.2beta2</td>
</tr>
<tr>
<td>log4jdbc.debug.stack.prefix</td>
<td></td>
<td>部分或者全部的包名称，通常填写和你的应用有关的包，如果不填写，真实调用JDBC的类名称会显示在日志中——通常是连接池的类</td>
<td>1.0</td>
</tr>
<tr>
<td>log4jdbc.sqltiming.warn.threshold</td>
<td></td>
<td>指定一个毫秒数，如果执行的SQL语句超过此时间，jdbc.sqltiming则会以WARN级别记录日志</td>
<td>1.1beta1</td>
</tr>
<tr>
<td>log4jdbc.sqltiming.error.threshold</td>
<td></td>
<td>指定一个毫秒数，如果执行的SQL语句超过此时间，jdbc.sqltiming则会以ERROR级别记录日志</td>
<td>1.1beta1</td>
</tr>
<tr>
<td>log4jdbc.dump.booleanastruefalse</td>
<td>false</td>
<td>是否把日志中的布尔值显示为true/false，大部分数据库默认是显示为1/0</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.maxlinelength</td>
<td>90</td>
<td>日志中SQL语句每行最大的字符数，超过了则自动换行</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.fulldebugstacktrace</td>
<td>false</td>
<td>是否显示完整的调用堆栈</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.select</td>
<td>true</td>
<td>如果设置为false，则不输出select语句到日志</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.insert</td>
<td>true</td>
<td>如果设置为false，则不输出insert语句到日志</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.update</td>
<td>true</td>
<td>如果设置为false，则不输出update语句到日志</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.delete</td>
<td>true</td>
<td>如果设置为false，则不输出delete语句到日志</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.create</td>
<td>true</td>
<td>如果设置为false，则不输出create语句到日志</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.dump.sql.addsemicolon</td>
<td>false</td>
<td>是否自动在SQL语句后面加分号;</td>
<td>1.2alpha1</td>
</tr>
<tr>
<td>log4jdbc.trim.sql</td>
<td>true</td>
<td>是否清除SQL头尾的空白符</td>
<td>1.2beta2</td>
</tr>
<tr>
<td>log4jdbc.trim.sql.extrablanklines</td>
<td>true</td>
<td>是否包含多余的空白行</td>
<td>1.2</td>
</tr>
</tbody>
</table>
<p style="color: #000000;">我针对1.2版本（1.2-ext-3），进行了一些简单的扩展，其特性如下：</p>
<ol>
<li>支持基于Hibernate或者sqlinform的SQL语句格式化，增强可读性</li>
<li>支持stacktracefilterincludes、stacktracefilterexcludes等log4jdbc.properties配置项，以便从调用栈里包含、清除包含某些字符的行，防止各种字节码框架生成的类干扰调试</li>
</ol>
1.2-ext-3版本的log4jdbc.properties配置可以如下：<br />
<pre class="crayon-plain-tag">log4jdbc.dump.sql.select=true
log4jdbc.dump.sql.insert=true
log4jdbc.dump.sql.update=true
log4jdbc.dump.sql.delete=true
log4jdbc.dump.sql.create=true

#是否格式化SQL语句
log4jdbc.dump.formatsql=true
#是否显示完整的调用堆栈
log4jdbc.dump.fulldebugstacktrace=true
#仅包含commons或者demo的调用栈的行，才会被记录
log4jdbc.dump.stacktracefilterincludes=commons,demo
#包含$、_的调用栈的行，一定被排除，即使符合stacktracefilterincludes
log4jdbc.dump.stacktracefilterexcludes=$,_</pre><br />
1.2-ext-3版本的SVN地址为：svn://svn.gmem.cc/log4jdbc3/trunk
它需要一个依赖包：<br />
<pre class="crayon-plain-tag">&lt;dependency&gt;
    &lt;groupId&gt;com.sqlinform&lt;/groupId&gt;
    &lt;artifactId&gt;sqlinform&lt;/artifactId&gt;
    &lt;version&gt;0.0.1&lt;/version&gt;
    &lt;optional&gt;true&lt;/optional&gt;
&lt;/dependency&gt;</pre><br />
该包可以从这里下载：<a href="/wp-content/uploads/2013/01/sqlinform-0.0.1.zip" target="_blank">sqlinform-0.0.1</a>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/log4jdbc">使用log4jdbc记录SQL语句的执行情况</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/log4jdbc/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
