Spring Boot中默认日志工具是 logback
,只不过我不太喜欢 logback
。为了更好支持 spring boot 框架,我使用 log4j
。
spring boot 1.2.X
版本一般建议使用默认日志工具(logback),也可以使用 log4j。
但,注意的是:Spring Boot 1.2.4.RELEASE
包含一个bug,github上关于该问题的解释。所以,当你通过application.properties
定义日志级别时,该错误会更改父记录器级别,在最差情况下会更改根记录器级别。虽然这个bug是修复在1.2.6.RELEASE
,我建议至少使用1.2.8.RELEASE
(如果你想坚持1.2.x)。
因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题而出现各种奇奇怪怪的bug。
spring boot 从 1.3.X 版本开始支持 slf4j
+log4j/log4j2
。
* 首先,先解决为什么使用 SL4J Facade?
对于这个问题,网上已经有许多精彩地点答案了,我就直接附上其中一篇的地址了:为什么要使用SLF4J而不是Log4J。
同时,附上一张工作流程图:
slf4j
+log4j2
放到了1.4.X
版本中来应用。 1.3.X
版本的 spring boot 项目(记得排除logback-classic
的依赖)。<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
<exclusions>
<exclusion>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
exclusion>
exclusions>
dependency>
2.引入 SL4J 依赖。
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.19version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.5version>
dependency>
3.引入 LOG4J 依赖。
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-apiartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-jclartifactId>
<version>2.5version>
dependency>
顺便解释一下,log4j-jcl工件是Apache Log4J Commons Logging Bridge。 如果你打算将Spring Boot application.properties日志配置路由到Log4J文件追加器,那么它是必需的。
4.添加一个测试Controller
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LoggerController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/mylog")
public String index(){
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
return "success";
}
}
5.在src/main/resources
目录下加入log4j.properties
配置文件
这个,与 spring 框架下的 log4j.properties 通常配置一样,我就简单提供一个。
#LOG4J配置
#设定root日志的输出级别为INFO,appender为控制台输出stdout,文件输出为file
log4j.rootLogger=INFO,stdout,file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n
#只打印级别为ERROR或以上的消息。
log4j.logger.noModule=FATAL
#对 com.test 包下的配置
log4j.logger.com.test=DEBUG
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.freemarker=WARN
log4j.logger.com.mchange=WARN
#文件输出配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n
6.启动项目访问 http://localhost:8080/mylog 就可以在 log.log 文件与控制台中看到日志打印的信息。
从 spring boot 1.4开始的版本就要用log4j2
1.将上一个项目中有关 log4j 与 slf4j 的有关依赖全部去掉,因为 springboot 已经帮我们集合好了。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-loggingartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-log4j2artifactId>
dependency>
2.添加 log4j2.xml 文件(与 application.properties 同级)。
<Configuration status="trace">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout>
<pattern>[%-5p] %d %c - %m%npattern>
PatternLayout>
Console>
<File name="File" fileName="log.log">
<PatternLayout>
<pattern>[%-5p] %d %c - %m%npattern>
PatternLayout>
File>
Appenders>
<Loggers>
<Logger name="com.github" level="debug" />
<Logger name="qg.fangrui.boot" level="debug">
<AppenderRef ref="File" />
Logger>
<Root level="debug">
<AppenderRef ref="Console" />
Root>
Loggers>
Configuration>
3.在 application.properties 中加入配置文件的扫描位置
logging.config=classpath:log4j2.xml
4.再次启动并访问 http://localhost:8080/mylog
控制台输出日志:
日志文件:
参考项目地址:https://github.com/FunriLy/springboot-study/tree/master/%E6%A1%88%E4%BE%8B2