lsf4j日志门面整合多种日志框架

lsf4j日志门面整合多种日志框架

什么是日志门面

什么是门面,为什么要使用门面

门面指的是一种设计模式–JAVA设计模式之门面模式(外观模式),文中总结了门面模式的优点:

松散耦合: 门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。

简单易用: 门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。

更好的划分访问层次: 通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

而标题中所提到的lsf4j正是常用的日志门面之一。当我们引入日志门面框架并使用其接口时,不论系统中使用的是哪种种框架,只要符合日志门面框架的接口就能随时切换;当我们系统中引用了jar包时,也可以排除掉jar包使用的日志框架,使得日志格式保持一致,以便后续对日志进行分析挖掘。

常用的日志门面有哪些

  • slf4j
  • JCL

lsf4j是目前市面上最流行的日志门面,使用 lsf4j可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性。

常用的日志框架及其引入方式

  • Log4j

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${version}</version>
    </dependency>
  • Log4j2

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${version}</version>
    </dependency>
  • LogBack

    <!-- slf4j -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${version}</version>
    </dependency>
      
    <!-- logback -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-access</artifactId>
        <version>${version}</version>
    </dependency>

常用日志框架如何使用lsf4j门面

框架名称 如何使用lsf4j标准
Log4j 添加slf4j-log4j12依赖
Log4j2 添加log4j-slf4j-impl依赖
LogBack 无须操作,自身已实现slf4j标准(从LogBack配置文件也可看出)

lsf4j整合Log4j,LogBack,Log4j2

当我们系统中引用了jar包时,很容易就造成系统中存在多种日志框架共存的局面。

  • 多数场景下,引入的jar都是实现了lsf4j门面标准。我们可以在pom文件中,找到引入其他日志框架的jar,通过exclusion标签将该日志框架排除。

    框架名称 删除依赖
    Log4j log4j,slf4j-log4j12
    Log4j2 log4j-api,log4j-core
  • 凡事都有例外,在一些场景中,引入的jar没有实现lsf4j门面标准,也没有办法修改源码,添加lsf4j门面标准(即无法通过添加依赖的方式使用lsf4j门面),那该怎么办呢?答案还是修改pom文件,排除掉未实现lsf4j门面标准的jar,并引入新的依赖,新的依赖使用适配器模式,使其实现lsf4j门面标准。

    框架名称 删除依赖 补充依赖
    Log4j log4j log4j-over-slf4j
    Log4j2 log4j-api,log4j-core log4j-to-slf4j