SpringBoot整合日志
suichentree 11/14/2023 开发SpringBoot
[toc]
# SpringBoot整合日志
# SpringBoot中日志的使用?
市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等。
通常情况下,日志是由一个抽象层 + 实现层的组合来搭建的。这样可以方便随时替换不同的实现层日志框架,而不影响项目整体代码的改动。
并且开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。这样可以实现业务代码与日志实现层的解耦
抽象层 | 实现层 |
---|---|
JCL、SLF4J、jboss-logging | jul、log4j、log4j2、logback |
SpringBoot选择的是SLF4J+Logback的组合。由于Hibernate Mybatis这些框架有自己的日志框架使用。所有我们需要统一进行日志管理。即排除掉其他日志框架,只使用SLF4J+Logback的组合。
重点👇(在springboot中)
- 配置文件只需要配置实现层日志框架,即logback的配置,抽象层不需要配置。
- 与上述相反 , 在调用API时,调用的则是抽象层slf4j的API。
# Springboot统一日志管理
统一日志管理只使用SLF4J+Logback日志组合,排除到其他日志框架。
<!--spring框架使用的是commons-logging-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
PS:SpringBoot自带的spring-boot-starter-web,spring-boot-starter-test这两个依赖,包含了SLF4J和Logback依赖包。无需额外导入
# 日志默认配置-在application.properties中配置
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
//标准日志输出格式
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SpringBoot修改日志的默认配置
logging.file.name
和logging.file.path
不能同时生效,二者只可以存在一个。logging.file.name
可以指定路径和log文件的名字logging.file.path
只可以只当log的路径, 不能指定log的名字, 文件名称默认为spring.log
# 默认在当前项目下生成springboot.log日志
# 指定日志文件的完整的路径;
logging.file.name=C:\Users\Administrator\Desktop\springboot.log
# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.file.path=/spring/log
# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{100} - %msg%n
# 在文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} === [%thread] === %-5level === %logger{100} ==== %msg%n
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 自定义配置logback日志
SpringBoot默认的配置文件是application.properties文件。你可以自定义配置文件。
# 自定义配置文件位置
logging.config = classpath:logback-spring.xml
1
2
2
在resource目录下创建一个logback-spring.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--自定义logback配置文件-->
<!--控制台日志-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--打印格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n</pattern>
</encoder>
</appender>
<!--文件日志-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--按分钟输出日志文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>C:\\Users\\Administrator\\Desktop\\TestWeb.log.%d{yyyy-MM-dd-HH-mm}.log</FileNamePattern>
</rollingPolicy>
<!--打印格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 TRACE < DEBUG < INFO < WARN < ERROR < FATA-->
<root level="INFO">
<!--加载配置项-->
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE"/>
</root>
</configuration>
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
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
# 使用日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class testController {
//创建日志类
private static final Logger logger = LoggerFactory.getLogger(testController.class);
@RequestMapping("/demo1")
public String test(){
System.out.println("测试成功");
//输出日志
logger.info("这是在方法里边");
return "Test is success !!!";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19