Dawn's Blogs

分享技术 记录成长

0%

Spring Boot学习 (2) 日志 热部署

日志

记录日志

在程序开发过程中,需要定义一个 Logger 类型的属性 log,用于记录日志:

1
private static final Logger log = LoggerFactory.getLogger(Xxx.class);

@Slf4j 注解

lombok 提供了 @Slf4j 注解,可以简化开发。在类上声明 @Slf4j 注解,可以自动生成一个 Logger 类型的属性 log。

日志格式

在配置文件中,使用 logging.pattern.console 设置日志格式。

输出日志

日志输出级别

日志级别分为六个等级:

  • trace:运行时的堆栈信息。
  • debug:测试的 Debug 信息。
  • info:记录运行过程中的数据。
  • warn:运行过程中的告警数据。
  • error:错误信息。
  • fatal:灾难信息,与 error 合并。

可以使用 Spring Boot 的配置文件,设置日志的输出级别。可以为根、包、日志组设置日志输出级别。

1
2
3
4
5
6
7
8
9
10
logging:
group: # 设置日志组
group1: com.group1.xxx,com.group1.yyy
level:
# 根日志级别
root: info
# 为包设置日志
com.dawnzzz: debug
# 为日志组设置级别
group1: debug

日志文件

使用配置文件中的 logging.file 属性,可以定义日志文件的配置信息。

如果使用 logback 作为日志工具,使用 logging.logback.rollingpolicy 属性,可以设置滚动滚动属性。

热部署

通过引入 spring-boot-devtools,来实现应用程序的热部署

重启 vs 重载

Spring Boot 通过两个类加载器实现了重启:

  • base classloader:不变的类(例如,来自第三方jar的类)被加载到一个 base classloader。
  • restart classloader:正在开发的类被加载到 restart classloader中。

当应用程序被重新启动时, restart classloader 被丢弃,并被创建一个新的。 这种方法意味着应用程序的重启通常比冷启动快得多,因为 base classloader 已经可用并被加载

排除资源

默认情况下,改变以下资源不会触发应用程序重启:

  • /META-INF/maven
  • /META-INF/resource
  • resources
  • static
  • public
  • templates

以上资源不会触发重启,但是会触发实时重载

spring-boot-devtools 模块包括一个内嵌的 LiveReload 服务器,可以用来在资源发生变化时触发浏览器刷新。

使用 spring.devtools.restart.exclude 属性或者 spring.devtools.restart.extra-exclude 属性(添加额外的排除资源),可以定义排除的资源。

禁止重启

如果你想使用重启功能,可以通过使用 spring.devtools.restart.enabled 属性来禁用它。在大多数情况下,可以在 application.properties 中设置这个属性(这样做仍然会初始化 restart 类加载器,但它不会监控文件变化)。

如果要完全禁用重启支持(例如,因为它不能与特定的库一起工作),需要在调用 SpringApplication.run(…) 之前将 spring.devtools.restart.enabled 属性设置为 false。

1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApplication.class, args);
}

}