slf4j日志的使用原理

    科技2022-07-21  131

    slf4j日志的使用原理

     1、如何在系统中使用SLF4j

    在开发期间,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

    因此,在使用SLF4j时,给系统里面导入slf4j的jar和logback的实现jar。

    我们可以进入SLF4j的官网看一看:

    另外,我们还能看到日志框架图:

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

    2、遗留问题

    日志种类繁多且比较混乱,因此很有必要统一日志记录,即使是别的框架,是否能统一使用slf4j进行输出?这样就只用写slf4j的配置文件了。

    我们可以进官网详细看看:

     

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

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

    2、用中间包(狸猫换太子包)来替换原有的日志框架;

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

    3、SpringBoot日志关系

    这个依赖是每个项目都有的:

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

    SpringBoot使用它来做日志功能:   

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

    我们可以看看依赖图,进入pom文件右键

    找到日志相关的依赖:

    这就是底层的依赖关系:

    总结

    ​       1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录

    ​       2)、SpringBoot也把其他的日志都替换成了slf4j;

    ​       3)、中间替换包?

    如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉!

    我们知道,Spring框架用的是commons-logging,那么SpringBoot应该就要把这个日志包移除掉,我们来看看:

    <dependency>                      <groupId>org.springframework</groupId>                      <artifactId>spring-core</artifactId>                      <exclusions>                             <exclusion>                                    <groupId>commons-logging</groupId>                                    <artifactId>commons-logging</artifactId>                             </exclusion>                      </exclusions>               </dependency>

    (不同版本之间可能会存在差异,莫纠结)

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

    4、日志的使用

    1、默认配置

    当我们启动一个刚创建的项目时,有日志输出,因此我们知道,SpringBoot默认帮我们配置好了日志;

    日志的级别由低到高 :trace<debug<info<warn<error。可以调整输出的日志级别,日志就只会在这个级别以以后的高级别生效

    SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别:root级别。

    可以在控制台声明日志的格式,日志输出格式:

    %d表示日期时间,

    %thread表示线程名,

    %-5level:级别从左显示5个字符宽度

    %logger{50} 表示logger名字最长50个字符,否则按照句点分割。

    %n是换行符

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

    我们可以在具体项目中查看,例如我们查看一下logback,具体如下:

    找到logback:

    例如我们选择看base.xml文件,其中的resource来源于default.xml文件

    我们进入default.xml文件:

    其中就有对于控制台输出的日志的格式要求:

          <propertyname="CONSOLE_LOG_PATTERN" value="${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([.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    生成日志的途径

    logging.path

    不指定路径在当前项目下生成springboot.log日志

    可以指定完整的路径;

    logging.file=G:/springboot.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

     

     

    2、指定配置

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

     

    logback.xml:直接就被日志框架识别了;

    logback-spring.xml:日志框架就不认识它了,因为只认识logback.xml,也就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能。否则就会报错!

    例如,我们如果需要区分dev和非dev环境的日志输出,则我们需要在logback-spring.xml中添加如下信息:

    即在不同环境下,日志输出格式有所不同

    这个在自己最近接触的项目组pweb项目中有所接触

    如何激活呢?

    第一种方式:在配置文件application.properties中添加“spring.properties.active=dev”

    第二种方式:在命令行中调整:

    如果没有激活,即默认状态,则为:

    --spring:properties.active=default

    Processed: 0.011, SQL: 8