Spring-Boot-Log

Spring Boot 日志


虽然Spring Boot的底层Spring框架默认用的是JCL日志门面(抽像层),但是Spring Boot自己选择的日志门面是SLF4J(Simple Logging Facade for Java),日志实现则采用Logback

SLF4J

在开发过程中,日志记录方法的调用不应该直接调用实现类(Logback),而是调用抽象层(SLF4J)

1
2
3
4
5
6
7
8
9
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloLog {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloLog.class);
logger.info("Hello Log");
}
}

如何将系统中所有日志统一到SLF4J

  1. 将系统中其他日志框架先排除出去
  2. 用中间包来替换原有的日志框架
  3. 我们导入SLF4J其他的实现

日志的使用

默认配置

使用LoggerFactory.getLogger(getClass());获得一个记录器,然后调用以下方法来记录日志

  1. logger.trace(“这是trace日志…”); 用于跟踪框架运行情况
  2. logger.debug(“这是debug日志…”); 用于输出一些调试信息
  3. logger.info(“这是info日志…”); 用于自己定义的信息
  4. logger.warn(“这是warn日志…”); 警告(框架运行情况和预期不服)
  5. logger.error(“这是error日志…”); 出错(异常)

日志的级别有低到高排列,日志输出时只有高于输出界别的才会输出,例如Spring Boot默认的日志输出级别是info,只有inof、warn、error会输出,trace和debug不会输出。不过也可以在application.properties或application.yml中修改输出日志级别。

1
logging.level.root=TRACE
1
2
3
logging:
level:
root: TRACE

这样全级别的日志都会输出。

也可以指定特定框架的输出

1
2
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

输出日志到本地文件

  • logging.path:指定某个目录并按Spring规定输出日志文件(文件名是spring.log)。
  • logging.file:指定输出日志文件到某个文件(文件名自己定义)。
  • 两者如果同时定义,logging.file会覆盖logging.path,平时建议使用logging.path
logging.file logging.path Example Description
(none) (none) 仅控制台记录。
指定文件Specific file (none) my.log 写入指定的日志文件。名称可以是精确位置或相对于当前目录。
(none) 指定路径Specific directory /var/log spring.log写入指定的目录。名称可以是精确位置或相对于当前目录。

日志文件在达到10 MB时会轮换(Spring-1.org、Spring-2.org之类),并且与控制台输出一样,默认情况下会记录ERROR级别,WARN级别和INFO级别的消息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则以前轮换的文件将无限期归档。

指定输出格式

  • logging.pattern.console:指定控制台日志输出格式
  • logging.pattern.file:指定文件中日志输出格式

指定配置

在类路径(resources)下放上每一个日志框架的配置文件即可

Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties
  • logback.xml:直接就被日志框架识别了;
  • logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能(springProfile,可以指定某段配置只在某个环境下生效)

建议使用logback-spring.xml