Spring Boot 日志管理

Spring Boot 日志管理

默认日志配置

Spring Boot 默认已经集成了日志功能,使用的是 logback 开源日志系统。

我们新建一个项目,运行启动类,可以清楚地看到控制台打印的日志信息。Spring Boot 日志默认级别是 INFO ,下图也输出了几条 INFO 级别的日志。

图片描述

Spring Boot 项目启动时控制台输出的内容

Spring Boot 默认的日志输出内容含义如下:

  • 日期时间:精确到毫秒。
  • 日志级别:打印 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 等级别日志信息。
  • 进程 ID:当前项目进程 ID 。
  • 分隔符--- 是分隔符,分隔符后面代表具体的日志内容。
  • 线程名:方括号中间的内容表示线程名称。
  • 类名:当前日志打印所属的类名称。
  • 日志内容:开发人员设定的日志具体内容。

日志级别控制

通过配置文件来设置。

实例:

# 设置日志级别
logging.level.root=WARN

logging.level.root=WARN 中的 root 可以改为指定包名或类名,表示设置指定包或者类的日志级别。

输出日志文件

控制台日志保存的内容十分有限,大多数情况下我们需要将日志写入文件,便于追溯。

可以通过配置文件指定日志文件,如下配置会将日志打印到 C:\\logs\\spring-boot-log.log 文件中。

实例:

# 设置日志文件
logging.file=C:\\logs\\spring-boot-log.log                                                 

也可以指定日志文件输出的目录, Spring Boot 项目会在指定输出目录下新建 spring.log 文件,并在文件中写入日志。

实例:

# 设置日志目录
logging.path=C:\\logs

Tips:如果同时配置了 logging.fileogging.path ,则只有 logging.file 生效

使用 lombok 插件简化日志代码

普通情况下,如果要打印日志,需要添加一行代码 private Logger logger = LoggerFactory.getLogger(this.getClass()); 还是比较麻烦的。我们可以安装 lombok 插件,使用一个注解代替这行代码。

image-20201022112002631

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j // 添加日志输出注解
public class LogTest {
   // 不再需要定义 logger
   // private Logger logger = LoggerFactory.getLogger(this.getClass());

   @Test
   public void testPrintLog() {
      // 直接使用log输出日志
      log.trace("trace log");
      log.debug("debug log");
      log.info("info log");
      log.warn("warn log");
      log.error("error log");
   }
}

自定义日志配置

Spring Boot 也支持自定义日志配置,可以直接采用指定日志系统的配置文件,如 logback 、 log4j 。以 logback 为例,可以直接在 application.properties 文件中指定 logback 配置文件。

实例:

# 指定logback配置文件,位于resources目录下
logging.config=classpath:logback-spring.xml

Tips:使用 logback 日志系统后,日志级别与日志文件等信息都可以使用 logback-spring.xml 文件设置,不再需要从 properties 文件中设置了。

在生产环境,我们希望指定日志保存的位置,另外日志不能无限制一直保存,一般情况下保存最近 30 天左右的日志即可。这些都可以在 logback-spring.xml 文件中指定,此处给出一个完整实例供大家参考。

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- logback 配置 -->
<configuration>
	<!-- 输出到控制台 -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder
			class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期;%thread表示线程名;%-5level:左对齐并固定显示5个字符;%msg:日志消息;%n:换行符; -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n</pattern>
		</encoder>
	</appender>
	<!-- 输出到文件 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 正在打印的日志文件 -->
		<File>C:/logs/spring-boot-log.log</File>
		<encoder>
			<!--格式化输出:%d表示日期;%thread表示线程名;%-5level:左对齐并固定显示5个字符;%msg:日志消息;%n:换行符; -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n
			</pattern>
		</encoder>
		<!-- 日志文件的滚动策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 日志归档 -->
			<fileNamePattern>C:/logs/spring-boot-log-%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<!-- 保留30天日志 -->
			<maxHistory>30</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- 指定日志输出的级别 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
</configuration>
posted @ 2020-10-22 11:20  DurianTRY  阅读(485)  评论(0编辑  收藏  举报