java-日志

Posted by Liber Sun on December 5, 2018

日志系统对一个程序的重要性,尤其是Web应用,是不言而喻的。很多时候,日志可能是我们回溯问题的唯一方式。

日志常用框架

包括j.u.l、Log4j、LogBack以及Log4j2。 这些日志框架,基本都提供了多个层次的输出级别,并且我们可以把日志信息输送到任意我们想输送的地方。

我们想要在应用中打印日志的时候,可以使用以上四种类库中的任意一种。比如想要使用Log4j,那么只要依赖Log4j的jar包,配置好配置文件并且在代码中使用其API打印日志就可以了。

但是我们往往要是用日志的时候,是不建议我们直接使用日志框架的API的,我们推荐使用SLF4J,使用门面模式的日志框架。

日志门面模式

日志门面,是门面模式的一个典型应用,是为了在应用中屏蔽底层日志框架的具体实现。

门面模式(Facade Pattern),也叫外观模式。其核心就是,外部和一个子系统的通信必须通过一个统一的外观对象进行,这样使得子系统更易于使用。

门面模式

前面所说的日志常用框架,每一个框架都有着自己单独的API,要使用对应的框架就必须使用对应的API,增加了应用程序代码和日志框架的耦合性。

因此,我们就需要一个统一的外观对象,构建日志框架和应用系统之间的桥梁。对于应用系统而言,不论底层的日志框架如何更变,都不需要修改任何代码。只要统一的外观对象做的足够好,更换日志框架后,不需要修改任意一行代码,就可以直接上限。

在软件开发领域有这样一句话:计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。而门面模式就是对于这句话的典型实践。

SLF4J

Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,以外观模式实现。可以在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有Java Logging API、Log4j及logback等框架。以MIT 授权方式发布。

我们要意识到SLF4J只是一个门面服务而已,具体的日志实现还是要依赖Log4J、logback等日志框架。

总结

在Java生态体系中,围绕着日志,有很多成熟的解决方案。关于日志输出,主要有两类工具。 一类就是日志框架,来控制日志的输出。 另一类就是日志门面,利用一套通用的API,来屏蔽各种日志框架之间的差异。