mmayanshuo 2018-02-08
1. 创建log4j.properties,先把日志级别设置为debug
#logger level default is INFO
log4j.rootLogger=debug,console,file
#append to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d%p-%m%n
#append to file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=WEB-INF/logs/web.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d%p-%m%n
#Debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
3. 在pom中增加log4j的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
根据我们以前使用spring的经验,到此log4j应该就算配置好了,试一下,启动项目
发现控制台打印的日志仍然是info级别,即配置文件中的debug设置并未生效。这是springboot中使用log4j的一个特殊的地方(至少本文使用的版本是这样),只是引入spring-boot-starter-log4j还不够,还需要做一个特殊配置,排除spring-boot-starter对spring-boot-starter-logging的依赖,否则就会造成jar包冲突,无法使用log4j,我们增加如下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
再次测试,已经有debug信息打出来了
4. 第二步配置中将日志级别设置为了debug是为了第三步看的清楚,但如果真的使用debug级别的话, spring自身会打出大量的debug信息,对实际开发基本无意义,所以把日志级别改回info :
log4j.rootLogger=info,console,file
之后就会有另一个问题,在访问http://localhost:8088/KnowledgeIsland/user/list时,后台不会打印sql语句,然而在开发阶段,打印sql语句对开发的意义是不言而喻的,这个时候就需要单独为一些包设置打印级别,做法就是在log4j.properties里增加子log配置(关于log4j的配置的详细内容可参考我之前的文章), 单独为我们编写的代码包开启debug级别的日志:
#children log
log4j.logger.tech.luoyu.ki=debug
再次运行,spring的debug信息已经不再打印,sql正常打印,完成