Spring Boot的日志框架使用

电子说

1.3w人已加入

描述

日志框架

目前市面上常见的日志框架有:slf4j(Simple Logging Facade for Java)、logback、log4j、log4j2、commons-logging(Spring默认日志框架)、JUL(java.util.logging)等。

日志框架包括日志的抽象与日志的实现两部分,其中日志的抽象推荐使用slf4j,而日志的实现推荐使用logback。Spring Boot的日志框架默认选择的就是这两个。

SLF4J的使用

系统开发在使用日志的时候,不应该使用日志的实现,而应该使用日志的抽象,但是日志的配置文件还是要使用日志实现框架本身的配置文件,日志使用示例代码如下:

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!");
  }
}

slf4j的调用结构如下:

Boot

日志统一问题

当一个项目集成了多个框架,而这些框架大部分都集成了日志框架,就会出现一个项目底层使用多种日志框架的问题,slf4j给出了这个问题的解决办法,如下图所示:

Boot

日志框架统一为slf4j的步骤:①排除其他框架集成的日志框架;②用中间包来替换原来的日志框架;③导入slf4j框架的其他实现。

Spring Boot的日志

Spring Boot Starter的maven依赖:
< dependency >
     < groupId >org.springframework.boot< /groupId >
     < artifactId >spring-boot-starter< /artifactId >
     < version >2.7.7< /version >
     < scope >compile< /scope >
 < /dependency >

Spring Boot底层的日志依赖关系图:

Boot

Spring Boot使用的日志依赖:

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

由上图可以看出,Spring Boot自动适配了所有的日志,而且底层默认使用了slf4j+logback记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架移除即可。

Spring Boot默认日志框架示例代码如下:

package com.brevity;


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


 @SpringBootTest
 class LoggingApplicationTests {


     // 获取日志记录器,参数建议使用当前类
     Logger logger = LoggerFactory.getLogger(LoggingApplicationTests.class);


      @Test
      void logTest() {
          // Spring Boot默认使用的是info级别的日志
          logger.trace("跟踪日志");
          logger.debug("debug日志");
          logger.info("info日志");
          logger.warn("warn日志");
          logger.error("error日志");
      }


 }

修改默认的日志级别只需要在配置文件中修改即可,例如在application.properties文件中添加如下代码:

# 调整日志级别
  logging.level.com.brevity=trace
  # 修改控制台输出的日志格式
  # %d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度
  # %logger{50} 表示logger名字最长50个字符,否则按照句号分割,%msg:日志消息,%n是换行符
  logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分