Spring Boot学习之---Spring Boot的日志框架(五)

本文介绍市面上常见的日志框架,包括日志门面和日志实现的区别,并重点讲解SLF4j与logback的使用方法。此外,还介绍了如何在SpringBoot项目中统一日志输出并配置日志。

一、日志框架的了解

  • 市面上的日志框架。分为日志门面和日志实现。
  • Spring框架默认使用的JCL(也就是commons-logging)
  • Spring Boot选用SLF4j和logback。
  • JCL 最后更新在2014年,之后就没有更新了。所以现在主要使用SLF4J来打印日志
  • log4j、logback、slf4j都是一个人写的。log4j存在缺陷所以有了logback。后来发现该有一个接口规范来定义,所以有了日志门面slf4j
  • log4j2是Apache公司仿的log4j
日志门面 (日志的抽象层)日志实现
JCL(Jakarta Commons Logging 2014年后不再更新)
SLF4j(Simple Logging Facade for Java)
jboss-logging
Log4j
JUL(java.util.logging)
Log4j2
Logback

二、 SLF4j的使用 官网:https://www.slf4j.org

1、如何在系统中使用SLF4j 

开发的时候日志记录方法的调用,不应该直接调用日志的实现类,而是调用日志门面的方法。
导入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");
  }
}

每一个日志的实现框架都有自己的配置文件,使用slf4j后,配置文件还是 日志实现jar 本身的配置文件(日志门面只是一个接口,具体日志配置文件还是日志实现的配置文件)。
图示(在官网中找到这张图):只要日志门面,没有日志实现输出为null; Spring Boot选用SLF4j日志门面和logback日志实现

 2、遗留问题

以前的系统并不是使用的SLF4j和logback日志架构,如Spring(commons-logging)、Hibernate(jboss-logging) 等框架如何统一使用slf4j进行日志输出呢?解决办法如:图示(在官网中找到这张图)

  • 如何让系统中所有的日志都统一到slf4j?
  • 1、将系统中其他日志框架先排除出去;--先踢掉旧jar
  • 2、用中间包(图中的框架转换包)来替换原先的日志框架;--偷梁换柱包
  • 3、导入slf4j及其实现 。

3、 Spring Boot的日志关系

以图示方式显示Spring Boot的底层依赖关系 :右键--》Diagrams--》show dependencies
可以看到spring-boot-starter是一个基本依赖,spring-boot-starter--》spring-boot-starter-logging(SpringBoot使用它来做日志功能 )

  • 总结:
  • 1、SpringBoot底层使用slf4j+logback的方式来进行日志记录
  • 2、 SpringBoot把其他日志都替换成了slf4j,使用中间替换包

  • 3、如何引入其他日志框架呢?一定要把框架默认的日志依赖移除。比如Spring框架使用的是commons-logging,Spring Boot是怎么做的呢?在底层依赖关系上找到spring-boot-starter-logging,双击,可以看到移除了commons-logging依赖。

  • 4、Spring Boot能自动适配所有的日志,底层使用slf4j+logback的方式来进行日志记录。如果要引入其他日志框架,只需要把默认依赖的日志框架排除,再引入新的日志依赖即可。

4、 Spring Boot的日志使用

1)、默认配置

Spring Boot默认帮我们配置好了日志:

    // 记录器
    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    void contextLoads() {
        //日志的级别;
        //由低到高   trace<debug<info<warn<error
        //可以调整输出的日志级别;日志就只会在这个级别以后的高级别生效
        logger.trace("这是trace日志...");
        logger.debug("这是debug日志...");
        //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("这是error日志...");

    }

默认的日志格式:${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}

 日志输出格式:
		%d表示日期时间,
		%thread表示线程名,线程id
		%-5level:级别从左显示5个字符宽度,-5是靠左对齐
		%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
		%msg:日志消息,
		%n是换行符

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

 在哪里看配置:logback下面的defaults.xml、file.appender.xml等文件。意思是:超过10M之后,自动生成log2、log3等文件

2)、如何修改SpringBoot的日志默认配置  

logging.file.namelogging.file.pathExampleDescription
(none)(none) 只在控制台输出(默认)
指定文件名(none)my.log输出日志到my.log文件
(none)指定目录/var/log输出到指定目录的 spring.log 文件中

3)、指定配置文件

如果我们想自己写日志的配置文件,可以命名为logback-spring.xmllogback.xml,推荐命名为logback-spring.xml

Logging SystemCustomization(直接用以下文件命名,框架自动加载.优先级比application.properties高)
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties
  •  logback.xml :直接被日志框架识别(而不是Spring Boot框架,不识别不处理)。
        ---如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误:no applicable action for [springProfile]
  • logback-spring.xml:由SpringBoot解析日志配置,可以使用Spring Boot的高级Profile功能。
    <springProfile name="staging">
        <!-- configuration to be enabled when the "staging" profile is active -->
      	可以指定某段配置只在某个环境下生效
    </springProfile>
    
    如:在dev环境下和非dev环境下的不同输出
    <springProfile name="dev">
    	<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
    </springProfile>
    <springProfile name="!dev">
    	<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
    </springProfile>

    5、切换日志框架

可以按照slf4j的日志适配图,进行日志框架的切换。

(1)转成slf4j+log4j的形式(并不推荐,logback是log4j的升级):①先移除

②可以看到如图被移除了;

③再添加slf4j-log4j12的依赖即可。

(2)Spring Boot也支持slf4j+log4j2的starter。切换也很简单,①排除依赖spring-boot-starter-logging;②添加依赖spring-boot-starter-log4j2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值