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