SpringBoot默认用Logback来记录日志,并用INFO级别输出到控制台,Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
开启日志
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
由于spring-boot-starter包含了spring-boot-starter-logging,Thymeleaf依赖包含了spring-boot-starter,所以一般不用特别开启就可以使用logback。
日志级别
TRACE < DEBUG < INFO < WARN <ERROR < FATAL
在application.yml中开启,例如:debug: true
级别控制
logging.level.?=LEVEL
- ?为包名或Logger名
- LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
例如:
- logging.level.com.example=DEBUG :com.example包下所有class以DEBUG级别输出
- logging.level.root=WARN :root日志以WARN级别输出
输出日志到文件
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。
- logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
- logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO
切分文件日志RollingFileAppender
- maxHistory:保存最大多少天的日志
- totalSizeCap:日志文件上限自动删除旧日志
多环境日志输出
在logback-spring.xml中配置多环境,logback-spring.xml:
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
<logger name="com.dudu.controller" level="info" />
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="com.dudu.controller" level="ERROR" />
</springProfile>
也可以在多环境的yml文件中分别配置,例如在application.yml中:
spring:
profiles:
active: prod
在application-dev.yml中:
logging:
config: classpath:logback-dev.xml
在application-prod.yml中:
logging:
config: classpath:logback-prod.xml
然后就可以分别配置日志文件了。
示例代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
运行后在浏览器中访问:
http://localhost:8080
http://localhost:8080/index
*/
@RestController
public class HelloController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping({"/", "/index"})
private String index() {
//日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
logger.trace("日志输出 trace");
logger.debug("日志输出 debug");
logger.info("日志输出 info");
logger.warn("日志输出 warn");
logger.error("日志输出 error");
return "hello world";
}
}