java - Slf4j 自定义提供程序实现未被拾取

标签 java logging slf4j slf4j-api

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

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

所以我的类路径现在有

slf4j-api *-over-slf4j slf4j-simple(将被删除)

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

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

如何让 sl4j 看到我的自定义提供程序?

enter image description here

更新

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

但是在我的例子中,我的日志记录后端在我自己的代码库中(我不想将它分离到一个库中),所以是否有一个 API 可以将您的提供程序设置为 SLF4J?

enter image description here

最佳答案

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/

相关文章:

java - 获取所有受马影响的字段作为点数组

java - 如何在每次遍历 for 循环时显示更新的 GUI(使用 Swingworker?)

java - 使用 Spring MVC 映射资源

java - 输入目录名后清除文件名并回车

Delphi:现场应用程序错误日志记录

php - 记录捕获和未捕获的异常?

c# - 在 C# 中执行您自己的代码运行时分析

slf4j - 如何处理登录生产代码(logback/slf4j)

java - 默认 log4j 策略

java - Tomcat 和 SLF4J - 不将日志写入文件