我正在编写一个库,其中包含将在不同应用程序中使用的各种功能。我希望它能生成日志语句,对于使用该库的应用程序用户可见。例如,如果我正在构建一个应用程序并且正在使用该库,则希望该库生成对我可见的日志语句。要如何实现这一点呢?由于日志文件将由应用程序的开发人员配置,因此我的库如何知道如何记录日志?
如果您正在开发一个其他人会在他们的应用程序中使用的库,则应该使用日志门面。否则,您将强制库的用户配置和包含您选择的日志框架以及他们为其应用程序选择的框架。
例如,如果您使用log4j,但使用您的库的开发人员使用logback,他将不得不包括log4j配置文件和log4j jar(或采取其他措施)才能使您的库正常工作。
日志门面解决了这个问题(来自Apache Commons Logging):
编写库时记录信息非常有用。但是,有很多日志实现,而库不能对其所属的整个应用程序强加使用特定的实现。
Logging包是不同日志实现之间的超薄桥梁。使用commons-logging API的库可以在运行时与任何日志实现一起使用。Commons-logging支持许多流行的日志实现,并编写其他适配器也是一个相当简单的任务。
或者来自SLF4J的推理:
「简单的Java日志门面」或者说(SLF4J)是一个为各种日志框架提供简单门面或抽象化的工具,例如java.util.logging、log4j和logback,允许最终用户在部署时插入所需的日志框架。可供选择的日志门面包括:Apache Commons Logging和SLF4J。个人推荐使用SLF4J(搭配Logback)。