log4jdbc-log4j2是做什么用的,我想大家都知道,我先前一直使用的是log4jdbc-remix,但是最近我发现log4jdbc-remix 停止维护了,迁移到了log4jdbc-log4j2,因为之前就觉得这个挺不错的,所以我还是想来自己试一试。
1、下载jar
首先我们需要下载log4jdbc-log4j的jar包,但是log4jdbc-log4j有多个版本,我该使用那个版本呢,这个取决 你使用的那个版本的jdk。
log4jdbc-log4j2-jdbc3.jar for JDBC 3 support in JDK 1.5
log4jdbc-log4j2-jdbc4.jar for JDBC 4 support in JDK 1.6
log4jdbc-log4j2-jdbc4.1.jar for JDBC 4.1 support in JDK 1.7
所以大家可以根据自己使用的jdk版本下载相应版本的jar。
2、选择日志包
官网推荐使用log4j2,那么我们就使用log4j2吧!
使用log4j2,需要下载log4j-core和log4j-api 两个jar
这里还有个问题需要大家注意下,就是log4j 2.0-beta5 开始就是使用jdk1.6 编译了,所以如果你是使用jdk1.5, 那么你只能使用log4j 2.0-beta4及以下的版本了。
3、设置Logger
Log4jdbc-log4j2 只有一个logger,那就是log4jdbc.log4j2
<logger name="log4jdbc.log4j2" level="info" additivity="false"> <MarkerFilter marker="LOG4JDBC_NON_STATEMENT" onMatch="DENY" onMismatch="NEUTRAL" /> <appender-ref ref="Console" /> <appender-ref ref="log4jdbc_file" /> </logger>
这里我们可以来看一下MarkerFilter,我的理解就是文本过滤器,就是记录你想记录的日志文件类型
我们来列举看看它都提供了那些Filter:
LOG4JDBC_OTHER:
LOG4JDBC_EXCEPTION:
LOG4JDBC_SQL:
LOG4JDBC_SELECT:
LOG4JDBC_UPDATE:
LOG4JDBC_INSERT:
LOG4JDBC_DELETE:
LOG4JDBC_CREATE:
LOG4JDBC_NON_STATEMENT:
LOG4JDBC_CONNECTION:
LOG4JDBC_OTHER:
LOG4JDBC_JDBC:
LOG4JDBC_AUDIT:
LOG4JDBC_RESULTSET:
LOG4JDBC_RESULTSETTABLE:
以上介绍的Filter,其实我们大家可以从Filter的名字,大致可以知道这个Filter是干啥用的,此处我不多做讲解,毕竟我也是初学(怕误人子弟),详细的说明以后再补充吧。
4、使用log4j2
首先我们可以新建一个log4j2.xml文件,在classpath路径下面
我们可以参考官网提供的一个模版:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM -dd HH:mm:ss.SSS} [%t] %level - %m%n%ex%n"/> </Console> <File name="log4jdbc_file" fileName="log4jdbc.out"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %level - %m%n%ex%n"/> </File> </appenders> <loggers> <root level="off"> <appender-ref ref="Console"/> </root> <logger name="log4jdbc.log4j2" level="info" additivity="false"> <MarkerFilter marker="LOG4JDBC_NON_STATEMENT" onMatch="DENY" onMismatch="NEUTRAL"/> <appender-ref ref="log4jdbc_file"/> </logger> </loggers> </configuration>
关于logger level的设置,我们推荐设置为info or debug
logger里面MarkerFilter的配置,大家可以参考官网的说明,根据自己的实际需要来做配置。
5、配置数据源
这个有2中配置方式
我们先来看第一种:修改数据库链接的配置
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/platform?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=root
上面是我们一般的数据库属性的一般配置,要修改的地方主要有2个:
(1):jdbc.drvier
(2):jdbc.url。
我们来看看修改后的配置文件:
jdbc.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy jdbc.url=jdbc:log4jdbc:mysql://localhost:3306/platform?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=root
上面的是第一种配置方式,是不是很简单,我们再来看看第二种配置方式
如果你使用spring的话,一般会有这样的配置
<bean id="dataSource" class="..."> <property name="driverClass" value="${datasource.driverClassName}"/> <property name="jdbcUrl" value="${datasource.url}"/> <property name="user" value="${datasource.username}"/> <property name="password" value="${datasource.password}"/> ... </bean>
那么我们只需要修改成这样即可:
<bean id="dataSourceSpied" class="..."> <property name="driverClass" value="${datasource.driverClassName}"/> <property name="jdbcUrl" value="${datasource.url}"/> <property name="user" value="${datasource.username}"/> <property name="password" value="${datasource.password}"/> ... </bean> <bean id="dataSource" class="net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy"> <constructor-arg ref="dataSourceSpied" /> </bean>
是不是很简单,注意在2中方式之间,只要选择一种方式即可,当然你2种方式都配置上的话,估计日记就会重复的输出了,我在配置的过程中就出现了这个问题,害我找了好久,囧!
至此,所有的配置都已完成了。我们来测试看下:
是不是还有什么没有说到呢,对的,确实是有一些没有说道,关于日志的存储的,我想以天为单位,每天的log存放在一个log文件里,暂时我还没找到(也有可能是我自己不会用),后续我会继续研究继续补充上的,如果有会的朋友,也请指导下!