Springboot项目中slf4j日志的简单使用

The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for
 various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end 
 user to plug in the desired logging framework at deployment time.

  官网对于slf4j的描述:SLF4J 是日志记录系统的简单外观,允许最终用户在部署时插入所需的日志记录系统

为什么不直接使用 system.out.println()来打印我想看的信息?

  因为system.out.println()日志打印不可控制、也不能添加过滤器、打印时间无法确定、日志没有级别区分,而且无法将信息记录下来。

  为了解决项目在运行过程中能够让开发人员清晰明了地知道项目地运行情况,log日志应运而生。现在的日志框架也是非常多的,常见的日志框架包括了JUL(java util logging)、JCL(jakarta commons logging)、Jboss-logging、logback、log4j、log4j2、slf4j

  我们在项目中一般选择面向slf4j这种日志门户进行编程,但是日志底层的具体实现交给了不同的日志框架,例如交给log4j、logback……
在这里插入图片描述

  日志框架一多java的很多技术栈中使用的日志框架就无法做到统一,比如说我的项目使用了A组件和B组件,A组件底层使用的日志框架是log4j,B组件底层使用的日志框架是jul,如果想要统一使用slf4j日志框架,我们也不需要挨个去检查调整相关底层的依赖。

click to enlarge

  SLF4J官网提供了一组桥接传统日志API的的模块,slf4j为我们提供了一些jar包:

jcl-over-slf4j.jar 可以用于替换 commons-logging

log4j-over-slf4j.jar可以替换log4j

jul-to-slf4j.jar可以替换jul

  通过引入这些中间包就可以达到既能够使用slf4j日志框架又能够完美支持项目组件依赖的其他日志框架的目的。

  我们常用的springboot项目选择的日志框架是slf4j+logback的形式,什么意思?就是项目面向的是slf4j,其实底层的日志框架具体实现使用的是logback
在这里插入图片描述

如何在springboot项目中使用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");
  }
}

日志的等级分为:tracedebuginfowarnerror,从左往右日志等级依次递增,可以通过在项目中配置日志的输出等级从而达到只输出指定级别的日志信息。下面在新建项目中分别用5中等级打印一下日志信息:

package org.magic.log;

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

@SpringBootTest
class LogApplicationTests {

  private Logger logger = LoggerFactory.getLogger(getClass());

  @Test
  void contextLoads() {
    logger.trace("trace");
    logger.debug("debug");
    logger.info("info");
    logger.warn("warn");
    logger.error("error");
  }
}

在这里插入图片描述
结果只打印出了infowarnerror三种,debugtrace并没有打印出来,说明springboot默认的日志级别是info,项目只会打印info级别以上的日志。

  通过在配置文件中设置日志级别来控制日志输出,我们可以配置全局日志输出级别或者指定某个目录下的日志输出级别:
在这里插入图片描述
示例:设置org.magic.log目录下的文件的输出等级为trace,重新启动项目测试类contextLoads
在这里插入图片描述

日志输出格式
%d 				表示日期时间
%thread 		表示线程名称
%-3level  		级别从左显示3个字符长度
%logger{50}  	logger名字最长50个字符,否则按照句点分割
%msg  			日志信息
%n  			换行符

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

在项目的配置文件中自定义日志的输出格式:

#日志在控制台的输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n

#日志在日志文件中的输出格式
#logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n

在这里插入图片描述

#将日志信息输出到指定的日志文件中
logging.file.name=mylog.log

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,使用Slf4j可以方便地实现日志输出,同时支持多种日志框架的接入。下面是一个示例,演示如何在Spring Boot项目使用Slf4j,并指定日志格式。 首先,在项目的pom.xml文件,添加Slf4j和Logback的依赖: ```xml <dependencies> <!-- slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> ``` 然后,在src/main/resources目录下创建logback.xml文件,指定日志格式,例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 这里指定了日志输出格式,包括日期、线程、日志级别、类名等信息。 最后,在Java代码使用Slf4j进行日志输出,例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.info("Doing something..."); } } ``` 这样,就可以在控制台上看到类似以下格式的日志输出: ``` 2019-04-16 21:09:47,607 [main] INFO com.example.MyService - Doing something... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值