当前位置:  开发笔记 > 编程语言 > 正文

SLF4J - 它如何知道要使用的日志类型

如何解决《SLF4J-它如何知道要使用的日志类型》经验,为你挑选了1个好方法。

SLF4J是一个包装器/外观类,因此您可以使用许多不同的日志类型,例如logback,log4j等.假设我想使用logback和log4j,甚至第三个类似java.util.logging.当我写这样的日志:

    public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

我怎么知道它使用哪个日志框架?假设我希望它使用logback进行此调用,我怎么知道它不使用另一个框架?



1> Arnaud Denoy..:

如您所知,SLF4J只是一个接口,需要实现.基本上,SLF4J打电话给:

ClassLoader.getSystemResources("org/slf4j/impl/StaticLoggerBinder.class");

编辑:现在,这个信息有点过时了.现在看来,SLF4J java.util.ServiceLoader用来加载org.slf4j.spi.SLF4JServiceProvider但逻辑保持不变.

这意味着classpath必须包含具有此完全限定名称的类.

与slf4j兼容的每个日志框架都定义了这样一个类.

如果你深入研究代码logback,你会发现一个名为org.slf4j.impl.StaticLoggerBinder重定向到logback实现的类

如果你深入研究log4j的代码,就没有这样的类,但是在它之间有一个绑定框架log4j,slf4j它被调用slf4j-log4j,它也定义了一个名为org.slf4j.impl.StaticLoggerBinder但是重定向到log4j实现的类.

因此,如果您希望slf4j使用特定框架,只需将准确的jar放在类路径中,以便org.slf4j.impl.StaticLoggerBinder找到相应的实现.

这是大局(来源:http://www.slf4j.org/manual.html):

在此输入图像描述

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有