SpringBoot日志---日志门面与日志框架,SLF4j使用,SpringBoot日志关系,日志使用,

日志门面与日志框架 

数据库驱动

    数据库驱动是不同数据库开发商(比如oracle mysql等)为了某一种开发语言环境(比如java)能够实现统一的数据库调用而开发的一个程序,他的作用相当于一个翻译人员,将Java语言中对数据库的调用语言通过这个翻译翻译成各个种类的数据库自己的数据库语言,当然这个翻译(数据库驱动)是由各个开发商针对统一的接口自定义开发的

 JDBC

    JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,  (https://zhidao.baidu.com/question/689945946263537884.html

jdbc与数据库驱动的关系类似于---日志门面(日志抽象层)和日志框架的关系,不管用什么日志框架,都使用同一个日志门面。日志框架都是实现的抽象层,程序员只要面向日志门面编程即可。

市面上的日志框架;
 
JUL JCL Jboss-logging logback log4j log4j2 slf4j....
SpringBoot :底层是 Spring 框架, Spring 框架默认是用 JCL ;   SpringBoot 选用 SLF4j logback
 

SLF4j使用

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法(只要调用了日志门面的方法,它会自动关联到日志框架); 
给系统里面导入slf4j jar logback 的实现jar    http://www.slf4j.org/
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 以后, 配置文件还是做成日志实现框架自己本身的配置文 件;
 

统一日志记录

aslf4j+logback)= Springcommons-logging)+ Hibernatejboss-logging)+ MyBatisxxxx    

a系统有本身的日志门面和日志框架,但是它依赖了其它框架技术,它们又有自己的日志门面和日志框架。

统一日志记录,别的框架和我一起统一使用 slf4j 进行输出。

SpringBoot日志关系

查看依赖之间的关系:如图

 

底层依赖关系

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

 

@SuppressWarnings("rawtypes") 
public abstract class LogFactory { 
    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J ="http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j"; 
    static LogFactory logFactory = new SLF4JLogFactory();   // 适配层偷梁换柱

4 )、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉。    Spring框架用的是 commons-logging
 
<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 的方式记录日志,引入其他框架的时候,只需要 把这个框架依赖的日志框架排除掉即可;
 

日志使用


实践中出现如下问题

 

可以使用匿名内部类+lambda表达式简化变成过程 例如: logger.trace(()->"这是trace日志..."); 就能达到一样的效果不需要新建supplier类 

    @Test
    void contextLoads() {
        logger.trace(()->"trace");
    }

Java 8 中我们可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。


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

@Test public 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日志..."); 
}

由低到高 trace<debug<info<warn<error  ,

设置日志输出级别  (视频中针对特定的包设置日志级别的方法貌似不能用,以后再看)

logging:
  level:
    root: warn

效果

 

 

 

 

  • 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、付费专栏及课程。

余额充值