Slf4j:找到slf4j-api依赖项,但未找到提供程序

2022-05-14 00:00:00 java slf4j

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

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

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

如果没有SLF4J,则报告此警告(即不是错误)消息 可以在类路径上找到提供程序。放置一个(且仅放置一个) Slf4j-nop.jar slf4j-imple.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。当一个 库在SLF4J提供程序上声明编译时依赖项,它 将该提供者强加给最终用户,从而否定了SLF4J的目的。

我不知道如何正确地做这件事。如果你有经验,请给我讲解怎么做。


解决方案

如tutorialspoint中所述:

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

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

<!-- 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>

相关文章