记录下!!!
原文出处:http://hi.baidu.com/ideapocket/blog/item/7b2c6d677de82723aa184cbc.html
log4j详细配置
2008-11-20 11:02
1。什么是日志: 程序运行时,往特定输出文件或数据库里输出程序信息, 如:出错信息,运行记录,调试记录,等等。 日志(LOG)一般分为以下几种类型。 FATAL:系统错误(大错误)(程序被错误中断) 系统出现大错误时输出(程序无法处理的大错误,如硬件错误) ERROR:异常(程序被错误中断) 程序运行时出现的错误(程序员可以捕获处理) WARN :警告(程序不会中断) 程序不算出错,但以不推荐方式运行时输出。 INFO : 信息(程序不会中断) 程序中有意输出的信息,如程序运行信息, 如“程序开始”“程序结束”等。 DEBUG: 调试记录(程序不会中断) 调试程序时,跟踪程序运行的输出信息。 2.Log4J的使用。 Log4J是为了输出日志的Java程序包,是Apached的一个子项目。 可在http://logging.apache.org 下载并免费使用。 可以把LOG输出到,控制台,文件,或数据库。 这个网址里有很多Log4程序包,他们分别是, log4c -- ANSI C 版 log4E -- Eiffel 版 log::Log4perl -- Perl 版 log4net -- .NET 版 log4r -- Ruby 版 log4j -- Java版 3.Log4J的能输出LOG的优先级。 级别高 OFF 关闭所有LOG FATAL 不可预想的无法继续运行程序的场合,一般是写进syslog( 系统日志),在应用程序中很难捕获。 ERROR 出现异常,应用程序停止运行等,需要紧急对应的程度的错误。 WARN 警告,以不建议的方式运行。 INFO 信息,实际运行中最基本程度的信息,如,启动服务器, 运行某某程序或方法,运行结束等。 DEBUG 调试时输出的信息,有可能产生非常大量的LOG文件。 如为解决问题而设置输出断点LOG等。DEBUG调试时输出的 信息,所以投入运行时一般关闭DEBUG级别的LOG。 tracever log4j的 1.2.12 新加入比DEBUG还小的断点。 级别低 ALL 打开所有LOG 4.Struts使用Log4J。 项目里的,[JavaSource]下做一个,log4j.xml或log4j.properties以后 Struts就可以使用Log4J了,log4j.xml,log4j.properties是Log4J的 设置文档。struts先读入log4j.xml,要是没有再读入log4j.properties。 我认为log4j.xml更容易理解,而且可以做到赛选各种级别LOG后输出 (log4j.properies无法赛选),所以只讲log4j.xml。 5.Log4j.xml设置方法。 6.Log4j在Java程序里的使用。 Logger log = Logger.getLogger(inputClass); //输出到数据库时有"'"会出错所以把它换成全角 String outmessage = message.replaceAll("'", "’"); log.debug(outmessage);log.error(outmessage);log.warn(outmessage); 如想要动态输出LOG(更改输出目录和文件名),也就是强制改变读到 内存中的[Log4j.xml]里的相应输出目录和文件名。见下面例子。 |
sampe:
1、先添加maven依赖
<properties>
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
</dependencies>
2、添加log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %C:%L] %m%n" />
</layout>
</appender>
<appender name="LOG_FILE" class="org.apache.log4j.RollingFileAppender">
<!-- <param name="File" value="${LOG.DIR}/${LOG.NAME}.log" /> -->
<param name="File" value="./logs/overtime.log" />
<!-- <param name="File" value="D:/info.log" /> -->
<param name="Append" value="true" />
<param name="MaxFileSize" value="50MB" />
<param name="MaxBackupIndex" value="100" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %C:%L] %m%n" />
</layout>
</appender>
<appender name="ERROR_LOG_FILE" class="org.apache.log4j.RollingFileAppender">
<!-- <param name="File" value="${LOG.DIR}/${LOG.NAME}.error.log" /> -->
<param name="File" value="./logs/overtime.error.log" />
<!-- <param name="File" value="D:/info.error.log" /> -->
<param name="Threshold" value="error"/>
<param name="Append" value="true" />
<param name="MaxFileSize" value="50MB" />
<param name="MaxBackupIndex" value="100" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %C:%L] %m%n" />
</layout>
</appender>
<appender name="ASYN_LOG_FILE" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1024" />
<param name="LocationInfo" value="true" />
<appender-ref ref="LOG_FILE" />
</appender>
<appender name="ASYN_ERROR_LOG_FILE" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1024" />
<param name="LocationInfo" value="true" />
<appender-ref ref="ERROR_LOG_FILE" />
</appender>
<root>
<level value="info" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYN_LOG_FILE" />
<appender-ref ref="ASYN_ERROR_LOG_FILE" />
</root>
</log4j:configuration>
3、编写测试类。
package com.dangdang.example.elasticjob.fixture.repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
public static Logger logger=LoggerFactory.getLogger(Test.class);
public static void main(String args[]){
logger.info("loginfo");
logger.error("logerror");
try{
String s=null;
s.charAt(5);
}catch(Exception e ){
logger.error("ERROR",e);
}
}
}
这时,可以看到在本地Logs目录下生成的日志文件
------------------------------------------
log4j.xml配置
参考:
http://blog.csdn.net/jingyuwang1/article/details/49430233
1 简介
一般log4j的xml配置方式基本步骤有3个,第一步:配置appender;第二步:配置logger;第三步:配置root。下面配置一个ConsoleAppender和两个DailyRollingFileAppender为例具体展开。
1.1 日志级别
不考虑其他因素,日记级别FATAL>ERROR>WARN>INFO>DEBUG,这个是许多同学都清楚的,但是结合appender,logger,root的配置后,日志打印的结果会发生一些微妙的变化。
首先,root的中的日志级别在用户没有为某一个具体的logger配置日志级别的时候才会对该logger生效。这里就可以用来解释有的同学问为什么在root中配置了ERROR级别,但是日志中依旧有INFO的日志输出。
其次,如果某一个appender配置了日志过滤器,那使用该appender的logger配置日志级别的时候,范围不超出appender过滤的级别信息才会被输出。
2 配置appender
图2-1是一个标准的ConsoleAppender配置:
图 2‑1
如注释所描述,ConsoleAppender一般在我们调试项目时候用处比较大,这里不再多余描述。
图2-2是一个标准的FileAppender配置,这里我配置了一个info.log文件和一个eror.log,位于/opt/logs目录下面,分别用来记录一般消息和错误消息。
图 2‑2
appender的配置相对比较简单,除了过滤器,没有特殊要注意的。
3 配置logger
图3-1是两种looger配置。
图 3‑1
logger的name属性指代的是程序包路径,不用赘述。additivity属性,表示是否遵循缺省的继承机制。
需要注意:
1如果我们配置了true,那我们最好不要再给该logger配置appender-ref属性,除非被配置的appender-ref我们没有继续添加在root的appender-ref中,否则我们会发现日志重复。
2如果我们配置了false,那就必须为该logger配置appender-ref,否则日志不会被打印。
4 配置root
图4-1是一个标准的root配置。
图 4‑1
root的作用是是收集所有配置的logger(additivity=true)反馈上来的信息流并且根据root中配置的appender-ref进行输出,所以,如果我们logger配置了additivity=true,又配置了appender-ref,会导致日志重复。
注意:这里的level值对那些没有配置日志级别,而且additivity=true的logger才会有作用。
下面是具体的配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
<!--对于ConsoleAppender来说,在开发阶段还是比较有用的,能直接在ide中看到输出的日志内容,
但是在实际的产品阶段,我们更希望将日志输出到指定的文件上查看,这就需要用到FileAppender-->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %t %l %m%n" />
</layout>
<!--如果有过滤器,当前appender只会处理满足过滤器条件的日志信息-->
<!--<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="FATAL" />
<param name="AcceptOnMatch" value="true" />
</filter>-->
</appender>
<!-- 写到远端日志 -->
<appender name="DEFAULT-APPENDER-REMOTE" class="org.apache.log4j.net.SyslogAppender">
<param name="SyslogHost" value="${logServer}"/>
<param name="Facility" value="LOCAL1"/>
<param name="FacilityPrinting" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %t %c %m%n" />
</layout>
</appender>
<appender name="FRAMEWORK-APPENDER-REMOTE" class="org.apache.log4j.net.SyslogAppender">
<param name="SyslogHost" value="${logServer}"/>
<param name="Facility" value="LOCAL3"/>
<param name="FacilityPrinting" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %t %c %m%n" />
</layout>
</appender>
<!-- 写到本地日志 -->
<!--第一步:配置appender-->
<appender name="INFO-LOCAL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="/opt/logs/info.log" />
<param name="append" value="true" /><!--一般必须配置true,否则会覆盖而不是累加-->
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %t %l %m%n" />
</layout>
<!--如果有过滤器,日志文件中就只会有符合过滤器的日志信息-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="INFO" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<appender name="ERROR-LOCAL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="/opt/logs/error.log" />
<param name="append" value="true" /><!--一般必须配置true,否则会覆盖而不是累加-->
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %t %l %m%n" />
</layout>
<!--如果有过滤器,日志文件中就只会有符合过滤器的日志信息-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="WARN" />
<param name="levelMax" value="FATAL" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!--第二步:配置logger。
如果不配置,系统会采用默认策略,即additivity="true",level value="DEBUG"。
注意:additivity=true,表示遵循缺省的继承机制,此时就不应该继续配置appender-ref,否则日志会出现重复
相反,如果additivity=false,就必须要配置appender-ref,否则日志不会被打印,配置也就没有意义-->
<logger name="com.test.log4j" additivity="true">
<!--给具体的logger配置日志级别,比如com.test包下面日志级别大于等于DEBUG的,
才会交给appender进行处理。
注意:对于com.test包而言,此处的级别会覆盖root下面的日志级别-->
<level value="INFO" />
<!--如果此处配置了append-ref,而且additivity="true",将会和root里面的同一个
append-ref形成累加,即重复日志-->
<!--<appender-ref ref="CONSOLE" />-->
<!--<appender-ref ref="DEFAULT-LOCAL"/>-->
<!--<appender-ref ref="ERROR-LOCAL"/>-->
</logger>
<logger name="com.test2" additivity="false">
<level value="INFO" />
<appender-ref ref="INFO-LOCAL" />
</logger>
<!--第三步:配置root-->
<!--root的作用是收集所有配置的logger反馈上来的信息流并根据配置在root中appender进行输出,
只要你在looger中配置了additivity="false",就不会反馈到root中。-->
<root>
<!--优先级小于具体的logger中配置的级别,只有当具体的logger没有配置的时候,
这里才会对具体的looger起作用-->
<level value="DEBUG" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO-LOCAL" />
<appender-ref ref="ERROR-LOCAL"/>
</root>
</log4j:configuration>
二、log4j.properties设置
log4j.properties参数详解
log的级别分为debug(调试信息)、info(一般信息)、warn(警告信息)、error(错误信息)、fatal(致命错误信息)。
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java属性文件log4j.properties,下面以log4j.properties为例进行说明。
1、配置根Logger
Logger 负责处理日志记录的大部分操作,其语法为:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
appenderName:就是指定日志信息输出目的地的名称。
如:log4j.rootLogger=info,A1,B2,C3
在早期log4j版本中,org.apache.Category实现了记录器的功能,后使用logger扩展了Category类,因此log4j.rootCategory也可以使用。
如:log4j.rootCategory=INFO,A1,A2
2、配置日志信息输出目的地 Appender
Appender 负责控制日志记录操作的输出,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
其中"fully.qualified.name.of.appender.class" 有以下几种:
i.org.apache.log4j.ConsoleAppender(控制台)
该选项有以下几种:
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
ii.org.apache.log4j.FileAppender(文件)
该选项有以下几种:
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
iii.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
该选项有以下几种:
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=a.log:指定消息输出到a.log文件,默认是从web服务器的根路径开始。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
'.'yyyy-MM: 每月
'.'yyyy-ww: 每周
'.'yyyy-MM-dd: 每天
'.'yyyy-MM-dd-a: 每天两次
'.'yyyy-MM-dd-HH: 每小时
'.'yyyy-MM-dd-HH-mm: 每分钟
iv.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,可通过log4j.appender.appenderName.MaxFileSize=100KB设置文件大小)
该选项有以下几种:
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=a.log:指定消息输出到a.log文件,默认是从web服务器的根路径开始。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
v.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
例如:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\eclipsespace\\testSSH\\WebContent\\WEB-INF\\testlog.log
3、配置日志信息的格式(布局)Layout
Layout 负责格式化Appender的输出,其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
其中"fully.qualified.name.of.layout.class" 有以下几种:
i.org.apache.log4j.HTMLLayout(以HTML表格形式布局)
该选项有以下几种:
LocationInfo=true:默认值是false,输出java文件名称和行号
Title=my app file: 默认值是 Log4J Log Messages.
ii.org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
该选项有以下几种:
ConversionPattern=%m%n :指定怎样格式化指定的消息
其中%m%n等符号所代表的含义如下:
-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。
如:%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
[TEST] %p [%t] %C.%M(%L) | %m%n
iii.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
iv.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
4.其他
log4j.logger.com. neusoft =DEBUG
指定com.neusoft包下的所有类的等级为DEBUG。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
这两句是把这两个包下出现的错误的等级设为ERROR,如果项目中没有配置EHCache,则不需要这两句。
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
这两句是struts的包。
log4j.logger.org.displaytag=ERROR
这句是displaytag的包。(QC问题列表页面所用)
log4j.logger.org.springframework=DEBUG
此句为Spring的包。
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
Spring jdbc 打印日志
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=debug
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=Trace
此两句是hibernate的包。
三、将log写入多个文件中。
log4j配置:
log4j.rootLogger=info,stdout,info,debug,error
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = INFO
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = ERROR ## 输出DEBUG级别以上的日志
log4j.appender.error.append=true
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log
而实际上这部分代码解决不了按照LOG4J的级别文件进行文件输出。
配置中关键的配置说明是这一句:
log4j.appender.debug.Threshold = INFO
mybaties打印sql
二、配置log4j的配置文件。
不同的项目中,log4j的配置文件的格式可能不同,在一些项目中,log4j的配置文件是XML格式的,比如log4j.xml;在另一些项目中,log4j的配置文件是properties格式的,比如log4j.properties。
备注:properties格式文件的配置一般只在老的项目中存在,新的互联网类项目,一般都是XML格式。
1、对于properties格式文件的配置。
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
2、对于xml格式文件的配置。
1 <loggers> 2 <!-- name可以指定包名或具体的类;additivity如果指定true,则root logger也会生效,相同日志会输出两次;false,则只有当前日志文件输出 --> 3 <!-- 借据插入接口日志 --> 4 <logger level="info" name="insertCreditBill" additivity="false"> 5 <appender-ref ref="insertCreditBillLog" /> 6 </logger> 7 8 <!-- 下面是打印通过log4j2打印出mybatis语句的配置--> 9 <logger name="com.xxx.mydao"> 10 <level>DEBUG</level> 11 </logger> 12 <logger name="com.springframework"> 13 <level>DEBUG</level> 14 </logger> 15 <logger name="com.ibatis" additivity="true"> 16 <level>DEBUG</level> 17 </logger> 18 <logger name="com.ibatis.common.jdbc.SimpleDataSource" additivity="true"> 19 <level>DEBUG</level> 20 </logger> 21 <logger name="com.ibatis.common.jdbc.ScriptRunner" additivity="true"> 22 <level>DEBUG</level> 23 </logger> 24 <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" additivity="true"> 25 <level>DEBUG</level> 26 </logger> 27 <logger name="Java.sql.Connection" additivity="true"> 28 <level>DEBUG</level> 29 </logger> 30 <logger name="java.sql.Statement" additivity="true"> 31 <level>DEBUG</level> 32 </logger> 33 <logger name="java.sql.PreparedStatement" additivity="true"> 34 <level>DEBUG</level> 35 </logger> 36 <logger name="java.sql.ResultSet" additivity="true"> 37 <level>DEBUG</level> 38 </logger> 39 <logger name="org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl" additivity="true"> 40 <level>DEBUG</level> 41 </logger> 42 43 <!-- root logger,任何其它的logger最终都相当于继承自 root logger --> 44 <root level="INFO"> 45 <appenderRef ref="Console" /> 46 <appenderRef ref="FileLog"></appenderRef> 47 </root> 48 </loggers>
说明:
上述配置中,“com.xxx.mydao”为自己项目中MyBatis的所有的mapper和xml文件所在的包名字。
至此,log4j的打印SQL语句的配置完成。