2

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?

在此处输入图像描述

4

2 回答 2

3

SLF4J 1.8+(截至 2018 年 6 月 12 日处于测试阶段)放弃StaticLoggerBinderServiceLoader.

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

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

现在试试LoggerFactory.getLogger("something").info("something")它会拿起你的类来记录......

于 2018-06-12T01:49:56.397 回答
2

请参阅 SLF4J 常见问题解答,“如何使我的日志框架 SLF4J 兼容? ”和周边区域:

  1. 从现有模块的副本开始,
  2. 在你的日志系统和 org.slf4j.Logger 接口之间创建一个适配器
  3. 为上一步创建的适配器创建工厂,
  4. 修改 StaticLoggerBinder 类以使用您在上一步中创建的工厂

看起来您的问题没有提到 StaticLoggerBinder,它是 SLF4J 工作所需要的类。这就是 SLF4J 如何找到您的日志接口的具体实现。

于 2018-06-11T18:04:39.780 回答