【问题标题】:Slf4j: Found slf4j-api dependency but no providers were foundSlf4j:找到 slf4j-api 依赖,但没有找到提供程序
【发布时间】:2019-02-12 14:54:20
【问题描述】:

我使用龙目岛。 前段时间在构建项目时,编译器开始发出以下消息:

找到 slf4j-api 依赖项,但未找到提供程序。你的意思是 添加 slf4j-simple?见https://www.slf4j.org/codes.html#noProviders .

如果你点击链接,会有一个相当模糊的评论:

这个警告,即不是错误,没有SLF4J时会报这个信息 可以在类路径上找到提供程序。放置一个(并且只有一个) slf4j-nop.jar slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或类路径上的 logback-classic.jar 应该可以解决问题。 请注意,这些提供程序必须针对 slf4j-api 1.8 或更高版本。

在没有提供者的情况下,SLF4J 将默认为无操作 (NOP) 记录器提供程序。

请注意 slf4j-api 版本 1.8.x 及更高版本使用 ServiceLoader 机制。早期版本依赖于静态绑定器 slf4j-api 不再支持的机制。请阅读常见问题解答 条目 SLF4J 版本 1.8.0 发生了什么变化?对于更重要的 详情。

如果您负责打包应用程序并且不在乎 关于日志记录,然后将 slf4j-nop.jar 放在你的类路径上 应用程序将摆脱此警告消息。注意嵌入 库或框架等组件不应声明 依赖于任何 SLF4J 提供程序,但仅依赖于 slf4j-api。当一个 library 声明了对 SLF4J 提供程序的编译时依赖,它 将该提供者强加给最终用户,从而否定了 SLF4J 的目的。

我不知道如何正确地做到这一点。如果你有经验,请告诉我怎么做。

【问题讨论】:

  • 你在类路径上有slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar 之一吗?

标签: java slf4j


【解决方案1】:

tutorialspoint 所述:

SLF4J 代表 Java 的简单日志记录外观。它提供了一个简单的 所有日志框架的抽象。它使用户能够工作 使用任何日志框架,例如 Log4j、Logback、JUL (java.util.logging) 等使用单个依赖项。

这意味着您必须在 SLF4J 本身的依赖项之上在您的类路径上提供一个具体的 java 日志库(Maven 示例):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha0</version>
</dependency>

您还需要指定对首选日志库的依赖关系。例如:

对于标准 jdk1.4 日志记录

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>2.0.0-alpha0</version>
    <scope>runtime</scope>
</dependency>  

对于slf4j-简单日志记录

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.0-alpha0</version>
    <scope>runtime</scope>
</dependency>

对于 log4j 日志记录

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>2.0.0-alpha0</version>
    <scope>runtime</scope>
</dependency>

【讨论】:

    【解决方案2】:

    参考此页面:http://www.slf4j.org/codes.html#noProviders

    您可以添加以下任一依赖项:在类路径应该可以解决问题

    我使用了来自 https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j 的“slf4j-simple”maven 依赖项

    【讨论】:

      猜你喜欢
      • 2023-01-07
      • 1970-01-01
      • 2013-08-26
      • 2022-12-09
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多