Slf4j 提供库来“愚弄”后端特定代码库,使其认为特定后端存在,同时将所有日志记录重定向到一个 slf4j api 兼容后端。
简而言之,log4j-over-sl4j 会将任何从 log4j 特定日志记录重定向到 slf4j。
所以我的类路径现在有
slf4j-api
*-over-slf4j
slf4j-simple(将被删除)
我正在尝试为 slf4j 1.8+ 提供自定义日志记录后端(请不要问为什么)。为了开始使用它,我已经将 slf4j-simple 复制到我的项目中。
当 slf4j-simple 作为依赖项日志记录按预期添加时,但是当我删除依赖项并简单地在我自己的代码库中保留完全相同的内容时,它不会拾取它(虽然不同的包)...
如何让 sl4j 看到我的自定义提供程序?
更新
我可以看到 jar 有一些额外的信息,可能是 slf4j 使用什么来选择提供者...
但是在我的例子中,我的日志记录后端在我自己的代码库中(我不想将它分离到一个库中),所以是否有一个 API 可以将您的提供程序设置为 SLF4J?
最佳答案
SLF4J 1.8+(截至 2018 年 6 月 12 日处于测试阶段)放弃了 StaticLoggerBinder
的概念,而是使用更好的东西称为 ServiceLoader
。
一旦您在自己的代码库中使用自己的包复制了一份 slf4j-simple
源代码,您只需在 ${projectRoot}/src/main/resources 创建一个文件/META-INF/services/org.slf4j.spi.SLF4JServiceProvider
并将完整的类名放入您自己的类中,该类将被提取 your.package.YourLoggingServiceProvider
确保您删除任何与另一个提供者的实际绑定(bind),slf4j 将给出一条明确的错误消息,表明您的类路径上有多个绑定(bind)。
现在尝试 LoggerFactory.getLogger("something").info("something")
它会选择您的类进行日志记录...
关于java - Slf4j 自定义提供程序实现未被拾取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50791423/