Java日志框架 -- SpringBoot中的日志使用
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java日志框架 -- SpringBoot中的日志使用相关的知识,希望对你有一定的参考价值。
1. SpringBoot中的日志使用
springboot框架在企业中的使用越来越普遍,springboot日志也是开发中常用的日志系统。springboot默认就是使用SLF4J作为日志门面,logback作为日志实现来记录日志。
1.1 SpringBoot中的日志设计
我们先创建一个SpringBoot的项目:
这是项目中的依赖:没有导入额外的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
我们来查看依赖关系图:
总结:
- springboot 底层默认使用logback作为日志实现。
- 使用了SLF4J作为日志门面
- 将JUL也转换成slf4j
- 也可以使用log4j2作为日志门面,但是最终也是通过slf4j调用logback
1.2 SpringBoot日志使用
1.2.1 在springboot中测试打印日志
LogsSpringbootApplicationTests.java
package com.tian;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LogsSpringbootApplicationTests
// 声明日志记录器对象
public static final Logger LOGGER = LoggerFactory.getLogger(LogsSpringbootApplicationTests.class);
@Test
void contextLoads()
// 打印日志信息
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info"); // 默认日志级别
LOGGER.debug("debug");
LOGGER.trace("trace");
运行结果:
1.2.2 修改默认日志配置
application.properties
# 指定自定义 logger 对象日志级别
logging.level.com.itheima=trace
# 指定控制台输出消息格式
logging.pattern.console=[%-5level] %dyyyy-MM-dd HH:mm:ss %c [%thread] %msg -- %n
# 指定存放日志文件的具体路径 file.path和file属性不可以同时出现,不然file会覆盖file.path
# logging.file=/logs/springboot.log
# 指定日志文件存放的目录,默认的文件名 spring.log
logging.file.path=c:/logs/springboot/
# 指定日志文件消息格式
logging.pattern.file=[%-5level] %dyyyy-MM-dd HH:mm:ss %c [%thread] -- %msg %n
运行结果:
1.2.3 指定配置
给类路径下放上每个日志框架自己的配置文件,SpringBoot就不使用默认配置的了。
示例:
因为SpringBoot默认使用的Logback日志框架,所以我们在类路径下放上logback.xml
配置文件即可被识别:
现在加上logback.xml
配置文件
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
配置集中管理属性
我们可以直接改属性的 value 值
格式:$name
-->
<property name="pattern" value="[%-5level] %dyyyy-MM-dd HH:mm:ss.SSS %c %M %L [%thread] %m%n"/>
<!--
日志输出格式:
%-5level
%dyyyy-MM-dd HH:mm:ss.SSS日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<!--定义日志文件保存路径属性-->
<property name="log_dir" value="c:/logs"/>
<!--控制台日志输出的 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>
<!--日志文件输出的 appender-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--日志文件保存路径-->
<file>$log_dir/logback.log</file>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>$pattern</pattern>
</encoder>
</appender>
<!--root logger 配置-->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
运行结果:
1.2.4 使用SpringBoot解析日志配置
logback-spring.xml
:由SpringBoot解析日志配置
示例:
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
配置集中管理属性
我们可以直接改属性的 value 值
格式:$name
-->
<property name="pattern" value="[%-5level] %dyyyy-MM-dd HH:mm:ss.SSS %c %M %L [%thread] %m%n"/>
<!--
日志输出格式:
%-5level
%dyyyy-MM-dd HH:mm:ss.SSS日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<!--定义日志文件保存路径属性-->
<property name="log_dir" value="c:/logs"/>
<!--控制台日志输出的 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>
<!--日志文件输出的 appender-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--日志文件保存路径-->
<file>$log_dir/logback.log</file>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<springProfile name="dev">
<pattern>$pattern</pattern>
</springProfile>
<springProfile name="pro">
<pattern>%dyyyyMMdd:HH:mm:ss.SSS [%thread] %-5level %msg%n</pattern>
</springProfile>
</encoder>
</appender>
<!--root logger 配置-->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
怎么选择是开发(dev)还是生产(pro)环境呢?
1.2.5 将日志切换为log4j2
现在的依赖为:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
然后我们把日志的配置文件换成log4j2的配置文件
接下来运行上面的测试代码即可看到运行结果:
补充知识:怎么排除依赖
以上是关于Java日志框架 -- SpringBoot中的日志使用的主要内容,如果未能解决你的问题,请参考以下文章