3

我目前正在尝试在我们基于 Eclipse 的产品中设置一个日志记录工具,使用 SLF4J 作为 Eclipse Orbit 项目的捆绑包。

我详细使用:

org.slf4j.api
ch.qos.logback.classic
ch.qos.logback.core
ch.qos.logback.slf4j

当我尝试使用 SLF4J 日志 API 运行测试用例时,在 Tycho 构建中我收到错误消息

19:05:50 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
19:05:50 SLF4J: Defaulting to no-operation (NOP) logger implementation
19:05:50 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Surefire 仅使用 Eclipse 产品和插件 Manifest.MF 文件的目标平台来检测依赖关系。由于 ch.qos.logback.slf4j 是一个片段,因此无法直接依赖于 Manifest。

我的假设是在测试执行期间,片段不是运行时配置的一部分。

我希望我的问题不是太愚蠢,但是如何配置环境,以便将片段添加到运行时配置中,并且 SLF4J 可以解决对 StaticLoggerBinder 的请求?

4

2 回答 2

0

我的假设是在测试执行期间,片段不是运行时配置的一部分。

我不是 slf4j 专家,但这听起来是问题的根源。您需要以某种方式指定您想要的 slf4j 后面的实现。

顺便说一句,您的产品也会遇到同样的问题。你如何解决那里的问题?


对这两个问题的建议是创建(或重用)一个引用您想要拥有的片段的功能。一旦有了这样的功能,你就可以

  1. 将其包含在您的产品中,以确保日志记录在产品安装中有效,并且

  2. 将它包含在您的测试运行时中以使日志记录在那里工作。您可以使用以下配置执行此操作:

    <plugin>
      <groupId>org.eclipse.tycho</groupId>
      <artifactId>target-platform-configuration</artifactId>
      <version>${tycho-version}</version>
      <configuration>
        <dependency-resolution>
          <extraRequirements>
            <requirement>
              <type>eclipse-feature</type>
              <id>feature-referencing-the-logging-implementation-fragment</id>
              <versionRange>0.0.0</versionRange>
            </requirement>
          </extraRequirements>
        </dependency-resolution>
      </configuration>
    </plugin>
    
于 2014-02-27T11:32:08.310 回答
0

虽然他的帖子很旧,但我最近遇到了同样的问题,希望我的回答能有所帮助。解决方案是将 ch.qos.logback.slf4j 片段的 jar 添加到 JUnit 测试类路径中。您可能需要添加位于 eclipse/plugins 文件夹中的 jar,以确保版本与 eclipse 安装中的插件匹配。

于 2017-01-17T10:41:36.120 回答