Apache Commons Logging日志记录器

x33g5p2x  于2022-10-25 转载在 Apache  
字(3.0k)|赞(0)|评价(0)|浏览(474)

Apache Commons Logging(以前称为Jakarta Commons LoglingJCL)是一个瘦适配器,允许配置桥接到其他著名的日志系统,如Log4J、LogKit。但通过包装,您可以将commons日志与任何其他日志系统(如log4j2、SLF4J、LogBack等)一起使用。

JCL本身不是日志框架。但它提供了对其他日志框架的抽象。这使得JCL成为工具开发人员的更好候选。例如,Spring Boot在后台使用JCL,LogBack是日志的实际实现。

为什么使用Commons日志记录?

正如我前面所说,JCL需要像Log4J或Logback这样的日志实现才能工作。因此,如果您只为自己开发,那么Commons Logging可能不适合您。但对于那些开发公共库或框架的人来说,他们的代码需要与日志框架无关。这就是commons日志的亮点。
Commons Logging具有合理的默认值。如果您已经有一个日志系统,它可以自动检测您的首选日志系统。这样,您根本不必配置任何内容。只需将commons-logging.jar添加到类路径中,您很可能不需要任何配置。

配置公用日志记录

要使用commons日志记录,您只需要commons-logging.jar。如果您使用的是maven项目,只需添加以下代码段即可。

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
Code language: HTML, XML (xml)

默认情况下,Apache Commons Logging将自动检测您使用的日志系统。例如,如果它在类路径中找到log4j,那么它将使用Log4JLogger将所有日志重定向到log4j。如果没有找到,它将使用Jdk14Logger
JCL按以下顺序查找记录器实现。
1.查看commons日志。org.apache.commons.logging.Log的属性
1.查看是否为org.apache.commons.logging.Log设置了系统属性
1.如果log4j在classpath中可用,请使用Log4JLogger包装类。
1.如果没有可用的日志记录系统,则使用Jdk14Logger
过去,对于低于java1.3的版本,有一个SimpleLog实现。但这不再重要了。
在所有这些中,最简单的选择是不提供任何配置,让客户机负责日志记录系统。
此外,ApacheCommonsLogging并没有为此提供任何方式来配置底层日志系统。客户端应该决定要使用哪个记录器。这是commons日志团队经过深思熟虑的设计决策。

在日志系统中使用JCL

由于Apache Commons Logging基于JDK 1.4日志API(JSR-47),因此仅支持log4j和Logkit。
要将Log4J用作日志客户端,只需将Log4J-1.2.jar添加到类路径并添加Log4J。properties配置文件,然后就完成了。

使用Logback配置commons日志

Logback是log4j1.x的替代品,但它不符合JSR-47。因此,您需要使用jcl-over-slf4j依赖来弥补差距。

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.32</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.9</version>
    </dependency>
Code language: HTML, XML (xml)

如果您有有效的logback,则使用这些依赖项。xml,然后您就拥有了一个工作日志系统,其中包含来自commons日志的日志语句。

使用Log4j2

Log4j2是Log4j1.x的后继者,它与commons日志也不兼容。因此,您需要添加一个JCL桥来使log4j2工作。

<dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-jcl</artifactId>
      <version>2.17.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.17.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.17.0</version>
    </dependency>
Code language: HTML, XML (xml)

通过这些依赖项以及log4j2.xml配置,您可以轻松地将所有日志从apachecommons重定向到Log4J系统。

或者,您可以使用jcl-over-slf4j并让slf4j与log4j2对话。但正如您从上图中看到的,它需要太多jar/routing,从而导致性能开销。

我应该何时使用commons日志记录?

如果,
1.您正在编写共享库。这很重要,因为如果您选择使用log4j编写所有内容,那么使用您的库的人现在会在日志系统之间发生冲突。例如,他们可能一直在使用Logback或Log4j2,甚至java.util.logging(JUL)。通过不将您的库与单个日志框架关联,使用您的库的人可以从公共日志的自动检测中受益。
1.您正在开发其他人将维护的应用程序。这样安装人员就可以选择自己选择的日志库。
1.**你想让你的代码记录系统不受干扰。**这个原因更多的是一个可选的事情。您始终可以重构整个代码库以匹配模式并替换所有导入。但换个花球要容易得多。xml不是吗。?

总结

在这篇文章中,我们了解了更多关于apachecommons日志的信息,以及如何使用各种日志系统配置它。

相关文章