java开发——slf4j日志的理解和比较篇

    技术2022-07-13  75

    定义:日志是什么

    日志主要是程序开发过程中,为了满足程序员观察数据变化搞出的东西。在java1.4之前,都是依靠println()完成这部分内容的。1.4之后,java自己出了一个相关的包。但是可能不是很好用,所以后面出来了一个log4j,还有slf4j之类的日志包。

    为什么要用日志

    日志篇主要记录的是日志的用法,我们平时开发的时候,可能会比较喜欢用:System.out.println();的方法来记录日志,但是,实际上这种方法可能封装的信息不是很够,在真正的企业开发的过程中,我们很可能只依靠sout输出的内容,很难找到bug出错的位置。而使用logger,可以方便定位,并且封装了各样的信息处理,给我们丰富的提示。

    介绍一下SLF4J日志

    简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade,允许用户在部署最终应用时方便的变更其日志系统。在系统开发中,统一按照slf4j的API进行开发,在部署时,选择不同的日志系统包,即可自动转换到不同的日志系统上。比如:选择JDK自带的日志系统,则只需要将slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途无法忍受JDK自带的日志系统了,想换成log4j的日志系统,仅需要用slf4j-log4j12-1.5.10.jar替换slf4j-jdk14-1.5.10.jar即可(当然也需要log4j的jar及配置文件)。 所以,SJF4J的使用,其内核需要配合其他的日志框架,如:log4j,logback之类的。具体的调用关系可以参考这:

    怎么使用

    直接上demo: maven项目的话要导入相关的包,我这里的demo是slf4j的使用。不过springboot2.x版本好像都自带这相关的日志包了,都不用你去写dependency了。

    <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.22</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency>

    这是一个定时器的代码,配置好了每分钟输出一条日志。

    package com.demo.javaspring.定时器; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Calendar; @Component @EnableScheduling public class scheduleDemo { Logger logger = LoggerFactory.getLogger(scheduleDemo.class.getName()); @Scheduled(cron = "0 */1 * * * ?") public void run() { logger.info("Current time is {}" , Calendar.getInstance().getTime()); System.out.println(); } }

    上面代码可以看出,日志的输出方式类似于c语言的format方式。其中{}就是以前的%s的方式,变量会被注入到这个{}的位置替代他。好处是节省了string常量池的空间。

    结束语

    最后,可能还可以补充一下需要的几个接口的基本使用和如何配合使用让自己最舒服的定位错误。不过,看之后时间吧。觉得需要的朋友可以点个赞,给我动力更新一波。

    Processed: 0.011, SQL: 9