写在前面:
继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用!
4.日志
1.日志基础
1.作用
- 编程器调试代码
- 运营期记录信息
2.日志级别
- TRACE:运行堆栈信息,使用率低
- DBUG:程序员调试代码使用
- INFO:记录运维过程数据
- WARN:记录运维过程报警数据
- ERROR:记录错误堆栈信息
- FATAL:灾难信息,合并计入ERROR
3.代码操作
- 添加日志记录
@RestController
@RequestMapping("/books")
public class BookController {
// 创建记录日志对象
private static final Logger log = LoggerFactory.getLogger(BookController.class);
@GetMapping
public String testSpringBoot()
{
String str = "Spring Boot is running!";
System.out.println(str);
log.debug("debug");
log.info("info");
log.warn("warning");
log.error("error");
return str;
}
}
- 用lombok中的@Slf4j简化日志对象创建代码
@Slf4j
@RestController
@RequestMapping("/books")
public class BookController {
// 创建记录日志对象
// private static final Logger log = LoggerFactory.getLogger(BookController.class);
@GetMapping
public String testSpringBoot()
{
String str = "Spring Boot is running!";
System.out.println(str);
log.debug("debug");
log.info("info");
log.warn("warning");
log.error("error");
return str;
}
}
- 设置日志输出级别
#开启DEBUG模式,输出调试信息,常用于检查系统运行状况
debug: true
#设置日志级别,root表示根节点,即整体应用日志级别
logging:
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
demo: com.example.controller
level:
root: info
# 为对应组设置日志级别
demo: warn
2.日志输出格式控制
1.格式
主要分为时间,级别,PID,所属线程,所属类名/接口名以及日志信息,如图
其中:
- PID,进程ID,用于标明当前操作所处进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
- 所属类/接口名,当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
2.设置输出格式
2.1 标签含义
%d
:日期,%m
:消息,%n
:换行,%p
:日志级别,%5p
:占5位字符
%clr(xx)
:xxx显示为彩色,%t
:线程名(thread),
%-40.40c
:左对齐类名(class)且最大长度为40且超过40就截取,{xx}
:颜色
2.2 样例
- 样例1
logging:
# 设置日志输出格式 %d 日期 %m消息 %n换行
pattern:
console:"%d - %m%n"
运行后如图
- 样例2
console: "%d %clr(%5p) %n"
运行结果
- 样例3
console: "%d %clr(%5p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
运行结果
3.日志文件
3.1 目的
便于维护时查看日志进行相应操作,控制台输出不安全
3.2 设置日志文件
- 设置,在application.yml中输入如下代码即可
logging:
# 设置日志文件,在根目录会找到
file:
name: server.log
- 文件位置如图所示
3.3 优化
- 目的:让日志按日期大小分为多个日志文件,便于进行查阅,防止单个文件太大而打不开
- 设置 ,类似于上文
logging:
logback:
rollingpolicy:
max-file-size: 4KB
file-name-pattern: server.%d{yyyy-MM-dd}.%i.log
- 文件位置类似与上文
三、使用开发篇
注:
- idea创建新模块hot_deploy,项目内容参考 基础篇中# 五.SSMP整合案例!
- 不同之处1:controller层,如图
- 不同之处2:users.html,如图
3.1 热部署
3.1.1 手动启动热部署
3.1.1.1 热部署
项目某一文件修改后无需进行重启服务器重新发布项目,只需要简单配置即可更新到修改后的内容
3.1.1.2 操作
- 在controller中查询用户号进行标注,如图
- 开启开发者工具:在pom的xml中加入如下代码
<!-- Springboot热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- 激活热部署:CTRL+F9
- 更改代码后激活热部署即可看见改变
3.1.1.3 关于热部署
- 重启:自定义开发代码,包含类,页面,配置文件等,加载位置restart类加载器
- 重载:jar包,加载位置base类加载器
3.1.2 自动启动热部署
- 右键项目打开settings设置
- 找到Build,Exception,Deployment中的Complier
- 选中Build project automaticaly应用确认即可,如图
- 2021版前IDEA配置方式:快捷键Alt+Ctrl+Shift+/后选择Registry中的
complier.automake.allow.when .app.running
即可,如图
- 2021版IDEA后配置方式:找到项目设置中的Tools的Advanced Settings中的Complier,选择Allow auto-make to start even if when application is currently runnning,如图
- 激活方式:IDEA失去焦点5秒后
3.1.3 热部署范围配置
- 默认不触发重启的目录列表:
- /META-INF/maven
- /META-INF/resources
- /resources
- /static
- /public
- /templates
- 自定义不参与热部署
# 自定义不参与热部署
devtools:
restart:
exclude: config/applications.yml,static/**
3.1.4 关闭热部署
- 配置文件中关闭
- 在application.yml文件中进行关闭,如下
# 自定义不参与热部署 devtools: restart: exclude: config/applications.yml,static/** # false为关闭 enabled: false
- 在项目启动类中用高一级语句来覆盖关闭热部署,如图