SpringBoot_日志

本文详细介绍了SpringBoot中日志的配置与使用方法,包括SLF4J的使用方式与原理,如何统一日志,SpringBoot日志的默认配置及如何修改,指定日志配置,以及如何在SpringBoot中切换日志框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SLF4J

SLF4J使用方式:

在开发过程中,我们不应该直接调用日志的实现类,而是应该调用日志抽象层里面的方法;

示例:


 // 导入 slf4j的jar和 logback 的实现jar
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
	public static void main(String[] args) {

		// 调用LoggerFactory的 getLogger(记录器) 去记录 HelloWorld类的信息
		Logger logger = LoggerFactory.getLogger(HelloWorld.class);
		//进行日志记录
		logger.info("Hello World");
	}
}


SLF4J使用原理:

SLF4J 绑定 logback : 应用程序 面向 SLF4J 进行编程,调用它的方法,在程序里面导入日志的 logback 实现
类jar包,由logback 的 jar包进行日志记录;

SLF4J 绑定 log4j : 应用程序 依旧面向 SLF4J 进行编程,依旧调用它的方法,然后在中间导入一个适配层(相当于向上实现了 SLF4J 的具体方法,向下真正进行日志记录的时候又调用 log4j 的 方法) ,在程序里面导入日志的 log4j 的jar包,由log4j 的 jar包进行日志记录;

在这里插入图片描述

注意点: 使用 slf4j 框架以后,配置文件还是做成日志实现框架本身的配置文件;


SLF4J统一日志:

让系统中所有的日志都统一到 SLF4J 中

1,将系统中其他日志框架先排除出去;

2,用中间jar包来替换原有的日志框架;

3,导入SLF4J 的对应其他实现类jar包 ;

日志适配图:
在这里插入图片描述


SpringBoot 日志

SpringBoot 日志关系:

在 SpringBoot 的 web 项目 pom.xml 中,默认导入了 spring-boot-starter-web 依赖:

	<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 

spring-boot-starter-web下包含 spring-boot-starter-logging ,SpringBoot 采用它来做日志功能:

	<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-logging</artifactId>
       <version>2.2.5.RELEASE</version>
       <scope>compile</scope>
    </dependency>

SpringBoot 的日志底层依赖关系:
在这里插入图片描述


SpringBoot 如果引入其他框架,要把这个框架的默认日志依赖移除掉:

示例:SpringBoot 底层是Spring,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>

注意点: SpringBoot 2.0及以上版本没有这样的写法;

总结:
SpringBoot 能自动适配所有的日志;
SpringBoot 底层使用 slf4 j+ logback 的方式记录日志;
SpringBoot 引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;


SpringBoot 日志使用:

SpringBoot 日志默认配置 :

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests {

    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    public void contextLoads() {

        /**
         * 日志的级别:
         * 由低到高   trace < debug < info < warn < error
         * 可以调整输出的日志级别;日志就只会在这个级别及以后的高级别生效
         * SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;
         */

        logger.trace("这是trace日志...");
        logger.debug("这是debug日志...");

        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("这是error日志...");

    }

}

SpringBoot 修改日志默认配置:

//调整项目下 com.yp 目录下日志级别为 debug 级别 
	logging.level.com.yp=debug 
	
//不指定路径:在当前项目下生成 myspringboot.log 日志
//指定完整的路径:在对应路径下生成 myspringboot.log 日志
 	logging.file=E:/myspringboot.log

//在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
	logging.path=/spring/log

//在控制台输出的日志的格式
	logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %5level %logger{50}%msg%n

//指定文件中日志输出的格式
	logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %5level === %logger{50} ==== %msg%n

日志输出格式说明:


  * %d: 表示日期时间
  * %thread: 表示线程
  * %‐5level:表示级别从左显示5个字符宽度
  * %logger{50}:表示logger名字最长50个字符,否则按照句点分割
  * %msg:表示日志消息
  * %n:表示换行符
  

logging.file 和 logging.path 比较:

logging.filelogging.path示例描述
(none)(none)只在控制台输出
指定文件名(none)myspringboot.log输出日志到 myspringboot.log 文件中
(none)指定目录/my输出到指定目录下的默认文件 spring.log 中

SpringBoot 指定日志配置:

给类路径下放上每个日志框架自己的配置文件即可,这样 SpringBoot 就不使用默认配置;

Logging SystemCustomization
Logbacklogback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java UtilLogging)logging.properties

注意点:

*logback.xml:*直接就被日志框架识别了;但是不能使用 SpringBoot 的高级 Profile 功能,如果使用 profile功能,会有以下错误 :

no applicable action for [springProfile]

*logback-spring.xml:*日志框架就不会直接加载日志的配置项,由 SpringBoot 解析日志配置,可以使用SpringBoot 的高级 Profile 功能;

<springProfile name="staging">
	<!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>
	<!‐‐可以指定某段配置只在某个环境下生效 ‐‐>
</springProfile>
SpringBoot 切换日志框架:

可以按照 SLF4J 的日志适配图,进行相关的切换;

slf4j + log4j 的方式;


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐starter‐web</artifactId>
	<exclusions>
		<exclusion>
			<artifactId>logback‐classic</artifactId>
			<groupId>ch.qos.logback</groupId>
		</exclusion>
		<exclusion>
			<artifactId>log4j‐over‐slf4j</artifactId>
			<groupId>org.slf4j</groupId>
		</exclusion>
	</exclusions>
</dependency>

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j‐log4j12</artifactId>
</dependency>


log4j2 的方式;


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐starter‐web</artifactId>
	<exclusions>
		<exclusion>
			<artifactId>spring‐boot‐starter‐logging</artifactId>
			<groupId>org.springframework.boot</groupId>
		</exclusion>
	</exclusions>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring‐boot‐starter‐log4j2</artifactId>
</dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值