SpringBoot中的日志框架

17 篇文章 0 订阅
15 篇文章 0 订阅

SpringBoot中的日志框架

本文介绍常用SpringBoot日志框架的整合,本笔记为博主在学习某互联网视频教程时所记,供大家参考

1、常用日志框架有

日志门面(日志的抽象层)日志的实现
JCL (Jakarta Commons Logging) SLF4J(Simple Logging Facade for java) jboss-loggingLog4j JUL(java.util.logging) Log4j2 Logback

我们只需要选一个日志门面和一个日志的实现即可

SLF4J、log4j、logback出自同一个人之手

SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL

SpringBoot选用slf4j和logback

1.1、开发的原则

在开发的过程中应该优先选择使用接口的API,而不是选用实现类的;

给系统中导入slf4j的jar和logback的jar

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

1.2、SLF4J框架的实现

在这里插入图片描述

每个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件

1.3、SLF4J的统一

对于一个系统引用了多个日志实现的情况,我们需要统一的转换才行

例如:Spring中用的是commons-logging,Hibernate用的是jboss-logging,这个时候就需要统一转成slf4j,然后再使用我们的jar进行转换即可

图示:

在这里插入图片描述

如何让系统中所有的日志都统一到slf4j

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

2、用中间包来替换原有的日志框架

3、我们导入slf4j其他的实现

2、SpringBoot的日志关系

2.1、SpringBoot的日志关系

SpringBoot 使用 spring-boot-starter-logging作为日志框架;

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

1)、SpringBoot底层将所有的日志实现,最终都转换为了slf4j-api;然后再使用logback进行实现

2)、SpringBoot默认使用的是logback进行日志实现,也就是springboot+logback模式

3)、查看依赖关系: IDEA->pom.xml->右键->Diagrams->show Dependencies

在这里插入图片描述

spring-boot-starter-logging
jul-to-slf4j
slf4j-api
logback-classic
logback-core
log4j-to-slf4j
log4j-api

2.2、总结

1、Spring Boot选用的是SLF4J和Logback进行日志记录

2、 Spring Boot也把其他的的日志都替换成了slf4j。可以查看替换包的源码,偷梁换柱!

3、如果我们要引入其他框架,一定要把这个框架的日志包移除掉,如下Spring Boot框
架依赖中就把Sping框架依赖的commons-logging依赖排除掉了。

3、日志的输出

3.1、日志的级别

由低到高

trace < debug < info < warn < error,

我们可以增加测试代码,验证默认的日志级别,如下:

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class DemoApplicationTests {

    Logger logger = LoggerFactory.getLogger(DemoApplicationTests.class);

    @Test
    void contextLoads() {
        logger.trace("trace追踪信息");
        logger.debug("debug调试信息");
        logger.info("info日志信息");
        logger.warn("warn警告信息");
        logger.error("error报错信息");
    }
}

我们查看控制台的输出,如下:

可以发现,默认的日志级别是info级别的

在这里插入图片描述

3.2、修改日志的级别

1)、我们可以通过修改application.properties配置文件的方式,调整默认的日志级别

2)、修改成功后的级别,默认只打印当前级别和当前级别高级的日志级别

3)、我们尝试将日志的级别调整为trace,如下:

# 修改日志的级别为trace
logging.level.com.example.demo=trace

查看我们的运行结果:

在这里插入图片描述

3.3、日志的输出路径

我们可以通过修改application.properties文件的方式,自定义日志的文件输出

说明:logging.file的优先级大于logging.path

logging.filelogging.pathExampleDescription
nonenone只在控制台输出
指定文件名nonemy.log输出日志到my.log文件
none指定目录/var/log输出到指定目录的spring.log文件中

打开源码,我们可以看到logback的默认配置,会输出到指定路径的spring.log文件中

在这里插入图片描述

3.4、日志的配置

官方的配置说明:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-logging

给类路径下放上每个日志框架自己的配置文件即可,加载配置时会判断,如我们使用自己
的配置文件,Spring Boot就不会使用它自己的默认配置:

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

官方推荐 logback-spring.xml的命名配置文件。

logback.xml:直接被识别为日志配置文件

logback-spring.xml 可以使用springProfile的高级特性

如下:

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
        defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_David

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值