#yyds干货盘点#Java日志门面之SLF4J

Posted link可

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Java日志门面之SLF4J相关的知识,希望对你有一定的参考价值。

第五章 SLF4J

1. 日志门面概述

1.1 门面模式(外观模式)

我们先谈一谈GoF23种设计模式其中之一。

门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。

外观模式主要是体现了Java中的一种好的封装性。更简单的说,就是对外提供的接口要尽可能的简单。

1.2 日志门面

前面介绍的几种日志框架,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。

为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。只要门面服务做的足够好,随意换另外一个日志框架,应用程序不需要修改任意一行代码,就可以直接上线。

1.3 常见的日志框架及日志门面

常见的日志实现:JUL、log4j、logback、log4j2

常见的日志门面 :JCL、slf4j

出现顺序 :log4j -->JUL-->JCL--> slf4j --> logback --> log4j2

2. SLF4J

2.1 SLF4J简介

简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。 当然slf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。所以我们可以得出SLF4J最重要的两个功能就是对于日志框架的绑定以及日志框架的桥接。

官方网站: ​https://www.slf4j.org/

2.2 SLF4J桥接技术

通常,我们依赖的某些组件依赖于SLF4J以外的日志API。我们可能还假设这些组件在不久的将来不会切换到SLF4J。为了处理这种情况,SLF4J附带了几个桥接模块,这些模块会将对log4j,JCL和java.util.logging API的调用重定向为行为,就好像是对SLF4J API进行的操作一样。

2.3 SLF4J案例实现

创建Maven工程,导入依赖

<!--slf4j 核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--slf4j 自带的简单日志实现 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>

设置jdk版本

<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

以上是关于#yyds干货盘点#Java日志门面之SLF4J的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 设计模式之代理模式:cglib动态代理

#yyds干货盘点# java通过sftp模式实现FTP的文件上传下载删除功能

#yyds干货盘点#K8S 之集群日志系统

#yyds干货盘点#K8S 之集群日志系统

Java&Go高性能队列之Disruptor性能测试#yyds干货盘点#

#yyds干货盘点#K8S 之 EFK 日志管理系统