Slf4j 自定义提供程序实现未被采纳

vac*_*ach 3 java logging slf4j slf4j-api

Slf4j 提供了一些库来“欺骗”后端特定代码库,使其认为特定后端存在,同时将所有日志记录重定向到一个 slf4j api 兼容后端。

简而言之,log4j-over-sl4j 会将 log4j 特定日志记录中的任何内容重定向到 slf4j。

所以我的类路径现在有

slf4j-api *-over-slf4j slf4j-simple (to be removed)

我正在尝试为 slf4j 1.8+ 提供自定义日志记录后端(请不要问为什么)。为了开始使用这个,我将 slf4j-simple 复制到我的项目中。

当 slf4j-simple 添加为依赖项日志记录时,会按预期发生,但是当我删除依赖项并简单地将完全相同的内容保留在我自己的代码库中时,它不会拾取它(尽管是不同的包)...

我怎样才能让 sl4j 看到我的自定义提供程序?

在此输入图像描述

更新

我可以看到该 jar 有一些额外的信息,可能是 slf4j 用来选择提供商的信息......

然而,就我而言,我的日志记录后端位于我自己的代码库中(我不想将其分离到库中),那么是否有一个 api 可以将您的提供程序设置为 SLF4J?

在此输入图像描述

vac*_*ach 5

SLF4J 1.8+(截至 2018 年 6 月 12 日处于测试阶段)放弃了 的概念StaticLoggerBinder,而是使用更好的称为 的东西ServiceLoader

一旦您slf4j-simple在自己的代码库中拥有了源代码的副本以及自己的包,您只需在以下位置创建一个文件${projectRoot}/src/main/resources/META-INF/services/org.slf4j.spi.SLF4JServiceProvider并将完整的类名放入您自己的类中,该类将被拾取your.package.YourLoggingServiceProvider

确保删除对另一个提供程序的任何实际绑定,slf4j 将给出明确的错误消息,表明您的类路径上有多个绑定。

现在尝试一下LoggerFactory.getLogger("something").info("something"),它将拾取您的课程进行记录...