slf4j加载其impl的机制

时间:2015-06-08 08:24:20

标签: java log4j slf4j

当你使用slf4j并希望将它与log4j一起使用时,你只需将log4j jar文件放在类路径中,并且没有任何配置slf4j理解它的impl。 slf4j如何做到这一点?这里的机制是什么?

1 个答案:

答案 0 :(得分:0)

首先让我澄清几点:

  • SLF4J定义了一个标准的日志记录API(如果记录API的数量可以通过,那么比你想象的要难。)
  • 虽然可以有很多SLF4J的实现,但常见的是sync objects
  • 历史上已经有多次尝试记录API,这些日志API又被您可能在项目中使用的其他API使用 - 例如Spring使用Commons Logging。

这最后一点非常重要。在项目中,您可以使用许多第三方API,每个API都使用一种流行的日志API(Log4J,Commons,JDK等)。这很痛苦,因为您必须单独配置每个。

解决方案是使用SLF4J,它为遗留日志API提供重新实现,后者委托给SLF4J。因此,当您使用的第三方API进行日志记录调用时,该调用将通过特定日志API的SLF4J实现委派到SLF4J。

所以正在使用的机制是委托,结合Java本身使用它从类路径加载的第一个类(在这种情况下是特定日志API的重新实现)这一事实。因此,只要重新实现中的Logging类与调用调用代码的定义相匹配,调用代码就更聪明了。