关于SLF4j日志框架使用

SLF4j框架的介绍

  • SLF4j只是一个日志框架的标准,具体的日志相关功能并不是由它实现的,常见的实现了日志相关功能的日志框架有:log4j、logback等,SLF4j提供了这些日志框架向SLF4j标准的转换。

  • 下面一段伪代码,表示SLF4j并没有真正实现日志功能,只是一个调用者,真正实现日志功能的是log4j和logback。其实这两个日志的实现的功能是不同的,用到哪一个开发者还要去切换,比较麻烦,因此出现了SLF4j日志框架,就不用来回切换,框架底层已经做好了统一标准

为什么要使用SLF4j框架

在开发实践中,通常禁止使用System.out.println() 这中语句输出信息,主要原因有:

  • 输出效率低下,特别是字符串与变量拼接时
  • 在开发过程中输出的某些信息,不适合在测试环境环境中被显示
  • 打桩输出没有附带时间和该输出语句所在的具体类,不方便后期删除打桩语句。

依赖问题以及应用

  • 在Spring Boot项目中,基础依赖(spring-boot-stater)中已经包含了日志相关的依赖项,可以直接使用日志框架来输出信息
  •  在添加了Lombok后,在任何类的声明之前,添加@Slf4j注解,则编译期会自动声明一个名为log的变量,所以,可以在类中通过此变量来输出日志
  • 如果没有使用Lombok,可以自行声明日志变量,例如:
private static Logger logger = LoggerFactory.getLogger(当前类的类名.class);

日志级别

在日志框架中,根据日志信息的重要程度,从可以不关注,到必须关注,划分了几个显示级别,依次是:

  • trace:跟踪信息--------  通常,希望开发人员可见。
  • debug:调试信息--------通常,开发人员、测试人员可见。
  • info:一般信息--------通常,不介意任何可见。
  • warn:警告信息--------通常,希望引起注意,但程序仍可运行。
  • errror:错误信息--------通常需要重视,程序可能可以运行,可能存在隐患,但也可能是正的。

日志显示级别

  • 在调试log变量的方法来输出日志时,有以上5个级别对应的方法,调用不同的方法,就会输出不同级别的日志。
  • 在没有加载Spring Boot的情况下,日志的默认级别是debug,只会显示次级别及更加重要的级别日志;如果加载了Spring Boot(例如在测试类上添加了@SpringBootTest注解),日志的默认级别是info,则只会显示info、warn、error级别的日志,不会显示trace、debug级别的日志。
  • 应用场景:在开发过程中,一般敏感的信息输出debug级别;开发时可以设置显示级别为trace级别或是debug级别,项目上线我们就可以很灵活的把显示级别设置成info级别,避免其他无关开发人员看到敏感信息,这项就不会向sout输出一个个删除要很方便的。

自定义配置日志显示级别

在SpringBoot项目中,可以在配置文件(application.properties / application.yml / 相关的Profile配置)中配置logging.level.包名属性,以指定包下的所有类的默认日志显示级别,属性值为5个级别中某一个

例如 application.yml 添加配置(另外,你可以在其他Profile配置中配置不同的显示级别):

logging:
  level:
    com.do.server: trace

注意点

  • 当配置日志级别的包名时,不必包名配置得特别具体,可以作用于其子孙包下所有的类,但是,必须至少配置1级包名,例如配置到com这一级别,不可以完全不配置报名,但需注意,当前项目中添加的所有依赖,也是当前项目的一部分,不应该将包名配置得过于简单,例如只使用com作为包名。
  • 提示:MyBatis框架会生成各Mapper接口的对象,这些对象在执行SQL语句时,也会输出日志,是trace和info级别的日志,当把日志的显示级别设置为较低的级别时,可以看到这些日志。 debug级别日志,就会在控制台看到SQL增删改语句以及结果的输出。trace级别日志,就会在控制台看到SQL查询语句以及结果的输出

日志级别重载方法的应用

  • 在调用日志方法时,如果输出的信息中包含变量值,推荐使用info(String var1,Object... var2)方法(其他日志级别也是同样参数列表的方法),在String var1参数中,可以使用{}作为占位符,表示此处是一个变量值,然后,通过Object... var2一次传入个占位符对应的值。
    • 其实每个日志级别的方法都是被重载了很多个,重点掌握下面一个重载方法。以info为例
    • 使用如上重载方法解决了字符串的拼接问题,如下图所示:输出效果一样,但使用日志输出,不存在所谓的字符串拼接。并且没有了字符串的拼接,执行效率就会更高一
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值