SpringBoot中日志框架使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring Boot 对日志框架的封装我们知道在日志方面,SpringBoot默认是使用的SLF4J+LogBack的形式。我们来看看它使用的日志实现框架LogBack,其在 DefaultLogbackConfiguration 类中,定义了文件日志格式如下:// DefaultLogbackConfiguration.javaprivate static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} " + "${LOG_LEVEL_PATTER

Spring Boot 对日志框架的封装
我们知道在日志方面,SpringBoot默认是使用的SLF4J+LogBack的形式。我们来看看它使用的日志实现框架LogBack,其在 DefaultLogbackConfiguration 类中,定义了文件日志格式如下:

// DefaultLogbackConfiguration.java

private static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} "

    + "${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";

1
2
3
4
日志输出示例如下:

2023-07-10 21:42:58.925 INFO 7000 --- [ main] com.zyb.MyApplication : No active profile set, falling back to default profiles: default
2023-07-10 21:42:59.473 INFO 7000 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-07-10 21:42:59.479 INFO 7000 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
1
2
3
文件日志格式解释:

%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} 日期和时间:毫秒精度。
${LOG_LEVEL_PATTERN:-%5p} 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE。
${PID:- } 进程 ID。
--- 分隔符:用于区分实际日志内容的开始。
[%t] 线程名称:在方括号中(可能会截断控制台输出)。
%-40.40logger{39} 日志记录器名称:这通常是源类名称(通常为缩写)。
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} 日志内容。
同时,允许通过 logging. 配置项来,进行自定义设置。例如说:

自定义日志格式

logging.pattern.file :文件的日志格式。
logging.pattern.console :控制台的日志格式。
logging.pattern.dateformat :日期和时间。
logging.pattern.level :日志级别。
logging.pattern.pid : 进程 ID。
logging.exception-conversion-word :记录异常时使用的转换字
自定义日志文件

logging.file.max-history :日志文件要保留的归档的最大天数。
logging.file.max-size :日志文件的最大大小。
logging.file :日志文件名。
logging.path :日志文件路径。
自定义日志级别

logging.level.* :日志等级,通过使用 logging.level.= 来设置。例如说:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1
2
3
最主要的是我们可以使用logging.config定义日志框架使用的配置文件地址。因为根据不同的日志实现框架,Spring Boot 按如下“约定规则”加载配置文件:

Logback :对应 logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy 配置文件。
Log4j2 :对应 log4j2-spring.xml、log4j2.xml 配置文件。
JUL :对应 logging.properties 配置文件。
这里的配置文件名根据SpringBoot的版本问题可能不同,例如在SpringBoot2.5.0版本中,logback-spring.xml不管用,但是logback.xml是可行的。

虽然 logging. 自定义配置项很多,但是一般情况下,我们只使用 logging.level.* 配置项,设置不同 Logger 的日志级别。也就是说我们主要的配置还是写在配置文件中。

目前,Spring Boot 内置了两个日志相关的 Starter :

spring-boot-starter-logging :使用 SLF4J + Logback 的组合。
spring-boot-starter-log4j2 :使用 SLF4J + Log4j2 的组合。
接下来我们来进行 Spring Boot 集成日志功能的快速入门,使用 SLF4J + Logback 的组合。主要功能包括:

控制台打印日志。
控制台颜色输出。
日志文件打印日志。
自定义日志级别。
SLF4J + Logback快速入门
依赖:


org.springframework.boot
spring-boot-starter-web

1
2
3
4
spring-boot-starter-web 包含了 spring-boot-starter ,而 spring-boot-starter 又已经包含了 spring-boot-starter-logging

配置文件

在 application.yml 中,添加日志相关配置,如下:

spring:
application:
name: just_do_it # 应用名

logging:
# 日志文件配置
file:
# path: /Users/yunai/logs/ # 日志文件路径。
name: ./logs/${spring.application.name}.log # 日志文件名。
max-history: 7 # 日志文件要保留的归档的最大天数。默认为 7 天。
max-size: 10MB # 日志文件的最大大小。默认为 10MB 。

# 日志级别
level:
com:
zyb:
controller:
LoggerController: DEBUG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
解释一下这个配置文件:

①在 logging.file. 配置项下,设置 Spring Boot 日志文件

默认情况下,Spring Boot 日志只会打印到控制台。所以需要通过 logging.file.path 或 logging.file.name 配置项来设置。不过要注意,这两者是二选一,并不是共同作用。

logging.file.name :日志文件全路径名。可以是相对路径,也可以是绝对路径。这里,我们设置为 “/Users/yunai/logs/${spring.application.name}.log” ,绝对路径。
logging.file.path :日志文件目录。会在该目录下,创建 spring.log 日志文件。例如说:/Users/yunai/logs/ 。
上述两者都配置的情况下,以 logging.file.name 配置项为准。
②在 logging.level.
配置项,设置自定义的日志级别。

Spring Boot 定义的日志级别为 TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。

默认情况下,控制台和日志文件的日志级别 INFO。即,INFO、WARN、ERROR 级别的日志,都会记录到控制台和日志文件中。

可以通过使用 logging.level.= 配置项,自定义 Logger 对应的日志级别。这里,我们设置了名字为 “cn.iocoder.springboot.lab37.loggingdemo.controller” 的 Logger 的日志级别,为 DEBUG 。

如果我们的控制台支持 ANSI ,则可以使用颜色输出,来提高可读性。通过 spring.output.ansi.enabled 配置项,设置 ANSI 功能的状态,有三种选项:

ALWAYS :启用 ANSI 颜色的输出。
NEVER :禁用 ANSI 颜色的输出。
DETECT :自动检测控制台是否支持 ANSI 功能。如果支持则进行开启,否则则进行禁用。默认情况下,使用 DETECT 这种选项。
默认情况下,Spring Boot 已经配置好颜色输出的日志格式,我们并不需要做自定义,所以这里也就不多做介绍了。我们只需要知道,不同日志级别,对应不同的颜色的映射关系即可:


接下来我们写一个Controller测试一下:

@RestController
@RequestMapping("/log")
public class LoggerController {

private Logger logger = LoggerFactory.getLogger(getClass());

@GetMapping("/debug")
public void debug() {
logger.debug("debug");
}

@GetMapping("/info")
public void info() {
logger.info("info");
}

@GetMapping("/error")
public void error() {
logger.error("error");
}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22


我们文件输出日志也有:


调试模式
默认情况下,Spring Boot 只会记录 ERROR、WARN 和 INFO 级别的日志。可能有时我们启动 Spring Boot 失败时,需要通过启动 Spring Boot 调试模式:

让核心 Logger(内嵌容器、Hibernate 和 Spring Boot 等等)打印 DEBUG 级别的日志,方便排查原因
应用中的其它 Logger 还是保持原有的日志级别。
目前,有两种方式开启 Spring Boot 应用的调试模式:

通过启动参数带上 --debug 标识,进行开启。例如说 $ java -jar myapp.jar --debug。
通过配置文件的 debug = true 配置项,进行开启。
spring:
application:
name: just_do_it # 应用名

logging:
# 日志文件配置
file:
name: ./logs/${spring.application.name}.log # 日志文件名。
max-history: 7 # 日志文件要保留的归档的最大天数。默认为 7 天。
max-size: 10MB # 日志文件的最大大小。默认为 10MB 。

# 调试模式
debug: true
1
2
3
4
5
6
7
8
9
10
11
12
13
Logback 扩展
Spring Boot 额外提供了 Logback 的两个 XML 标签的扩展。

① 拓展一: 标签

通过 标签,设置标签内的 Logback 的配置,需要符合指定的 Spring Profile 才可以生效。












1
2
3
4
5
6
7
8
9
10
11
② 拓展二: 标签

通过 标签,可以从 Spring Boot 配置文件中读取配置项。示例如下:





1
2
3
4
接下来我们进行演示

依赖不变,application.yml中只保留一个应用名的配置即可:

spring:
application:
name: just_do_it
1
2
3
然后开始编写我们的日志配置文件;

<?xml version="1.0" encoding="UTF-8"?>













${CONSOLE_LOG_PATTERN}
utf8











${LOG_FILE}



${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
7
10MB



${FILE_LOG_PATTERN}
utf8



























1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
如果对LogBack配置文件不是很熟悉,可以看我的上一篇文章:
一文弄懂Java日志框架

然后我们编写一个启动类:

@SpringBootApplication

public class MyApplication {

private static final Logger LOGGER = LoggerFactory.getLogger(MyApplication.class);

public static void main(String[] args) {

SpringApplication.run(MyApplication.class,args);

LOGGER.debug("在开发环境下可以看到");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
通过 IDEA 的 Active profiles 选项,设置启动的 Spring Boot 应用的 Profile 。如下图所示:

运行结果如下:


而如果是在生产环境下,我们是看不到这句话的。

SLF4J + Log4J2
引入依赖:


org.springframework.boot
spring-boot-starter-web



spring-boot-starter-logging
org.springframework.boot





org.springframework.boot
spring-boot-starter-log4j2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在 application.yml 中,仅添加应用名的配置即可,如下:

spring:
application:
name: just_do_it
1
2
3
然后我们在 log4j2-spring.xml 中,添加 Log4j2 配置,如下:

<?xml version="1.0" encoding="UTF-8"?>



????
%xwEx
%5p
yyyy-MM-dd HH:mm:ss.SSS

/Users/yunai/logs
demo-application



%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}


%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}














${sys:FILE_LOG_PATTERN}































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
如果对log4j2的配置文件不是很熟悉,同样可以看我的上一篇文章:
一文弄懂Java日志框架

参考 Spring Boot 默认的 log4j2 XML 配置文件 log4j2-file.xml,进行修改。

<1.1> 处,定义日志文件的基础路径和文件名。因为 Spring Boot 并未提供 Log4j2 拓展,无法像「7. Logback 拓展」一样直接读取 Spring Boot 配置文件,所以这里我们只能直接定义。

<1.2> 处,定义了控制台的日志格式。

<1.3> 处,定义了日志文件的日志格式。

<2.1> 处,配置控制台的 Appender 。

<2.2> 处,配置日志文件的 Appender。
< 3.1> 处,设置常用组件的 Logger 的日志级别。
< 3.2> 处,自定义的 Logger 的日志级别。这里,我们设置名字为 “cn.iocoder.springboot.lab37.loggingdemo” 的 Logger 的日志级别为 DEBUG。
< 3.3> 处,设置 Root 的 Appender 为控制台和日志文件,日志级别为 INFO。
测试方式与前面的例子一样,这里不多赘述。

0

0

0

专栏目录

————————————————
版权声明:本文为CSDN博主「十八岁讨厌编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyb18507175502/article/details/131647909

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
119 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
44 5
|
20天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
144 1
|
29天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
35 0
|
24天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
16天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
15天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
66 1
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
33 1