零、本文纲要
- 一、SpringBoot日志基础
- 二、SpringBoot自定义日志
1、自定义logger对象日志级别
2、指定控制台输出消息格式
3、指定存放日志文件的具体路径
4、指定配置
5、使用SpringBoot解析日志配置(灵活切换环境配置)
6、将日志切换为log4j2(经常使用)
tips:Ctrl + F快速定位所需内容阅读吧。
一、SpringBoot日志基础
注意:SpringBoot默认的日志门面是slf4j-api,日志实现是logback-core,是SLF4J
加Logback
的组合。
1、快速入门
- ① 导入依赖
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- ② 编写测试
//声明日志记录器对象
public static final Logger LOGGER = LoggerFactory.getLogger(LogTechSpringbootApplicationTests.class);
@Test
void contextLoads() {
// 打印日志信息
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info"); // 默认日志级别
LOGGER.debug("debug");
LOGGER.trace("trace");
}
- ③ 测试桥接器
// 使用 log4j2 使用桥接器切换为 slf4j 门面和 logback 日志实现
org.apache.logging.log4j.Logger logger = LogManager.getLogger(LogTechSpringbootApplicationTests.class);
logger.info("log4j2 info");
image.png
二、SpringBoot自定义日志
1、自定义logger对象日志级别
- ① 编写application.properties
# 指定自定义 logger 对象日志级别
logging.level.com.stone=trace
- ② 测试
2、指定控制台输出消息格式
- ① 编写application.properties
[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]=== %m%n
[左对齐5:日志级别] 日期:年-月-日 时:分:秒 类信息 [线程信息]=== 日志信息 换行
# 指定控制台输出消息格式 :[左对齐5:日志级别] 日期:年-月-日 时:分:秒 类信息 [线程信息]=== 日志信息 换行
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]=== %m%n
- ② 测试
3、指定存放日志文件的具体路径
- ① 编写application.properties
Ⅰ 指定路径及文件名形式:logging.file.name=/logs/springboot.log;
Ⅱ 指定日志存放路径,使用默认文件名spring.log:logging.file.path=/logs/
# 指定存放日志文件的具体路径
# 指定路径及文件名形式
# logging.file.name=D:/logs/springboot.log
# 指定日志存放路径,使用默认文件名spring.log
logging.file.path=D:/logs/
# 指定日志文件的消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]=== %m%n
- ② 测试
4、指定配置
给类路径下放上每个日志框架自己的配置文件,SpringBoot就不使用默认配置。
日志框架 | 配置文件 |
---|---|
Logback | logback-spring.xml , logback.xml |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JUL | logging.properties |
此处我们已Logback为例,如下:
- ① 配置logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--
配置集中管理属性
可以直接修改属性的value值
格式:${name}
-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!--
日志输出格式:
%-5level
%d{yyyy-MM-dd HH:mm:ss.SSS}日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<!--控制台日志输出的 appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制台输出流对象 默认System.out(黑色) 改为System.err(红色)-->
<target>System.err</target>
<!--日志消息格式设置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--
自定义logger对象
addtivity="false" 自定义logger对象是否继承 rootLogger
-->
<logger name="com.stone" level="info" addtivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
- ② 测试
可以看到,此时控制台输出的日志为红色,日期格式也多了毫秒,符合logback.xml配置,如下:
已Logback为例.png5、使用SpringBoot解析日志配置(灵活切换环境配置)
非常关键的一点,需要使用logback-spring.xml
、log4j2-spring.xml
命名的配置文件才能生效。
以下案例我们以logback-spring.xml为例,如下:
- ① 配置logback-spring.xml
在appender内的encoder属性中我们配置了springProfile
相关的内容。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--
配置集中管理属性
可以直接修改属性的value值
格式:${name}
-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread]---> %m%n"/>
<!--
日志输出格式:
%-5level
%d{yyyy-MM-dd HH:mm:ss.SSS}日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<!--控制台日志输出的 appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制台输出流对象 默认System.out(黑色) 改为System.err(红色)-->
<target>System.err</target>
<!--日志消息格式设置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<springProfile name="dev">
<pattern>${pattern}</pattern>
</springProfile>
<springProfile name="pro">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread]===> %m%n</pattern>
</springProfile>
</encoder>
</appender>
<!--
自定义logger对象
addtivity="false" 自定义logger对象是否继承 rootLogger
-->
<logger name="com.stone" level="info" addtivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
- ② 配置application.properties
# 指定项目使用的具体环境
spring.profiles.active=dev
- ③ 测试
如何我们dev的配置[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread]---> %m%n"
,如下:
6、将日志切换为log4j2(经常使用)
- ① 修改依赖配置pom.xml
Ⅰ 排除 Logback 的日志实现:spring-boot-starter-logging
;
Ⅱ 使用 log4j2 的日志启动器:spring-boot-starter-log4j2
。
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!--排除 Logback 的日志实现-->
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--使用 log4j2 的日志启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- ② 添加log4j2.xml配置文件
<!--
status="debug" 日志框架本身的输出日志级别
monitorInterval="5" 自动加载配置文件的间隔时间,不低于 5 秒
-->
<Configuration status="debug" monitorInterval="5">
<!-- 日志处理 -->
<Appenders>
<!-- 控制台输出 appender -->
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n"/>
</Console>
</Appenders>
<!-- logger 定义 -->
<Loggers>
<!-- 使用 rootLogger 配置 日志级别 level="trace" -->
<Root level="trace">
<!-- 指定日志使用的处理器 -->
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
- ③ 测试
三、结尾
以上即为SpringBoot使用日志的全部内容,感谢阅读。
网友评论