You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate日志文件未生成问题排查求助

Karate测试无日志生成+SLF4J依赖问题排查

问题描述

我之前查过类似问题但没解决,用以下TestRunner运行Karate的abc.feature文件:

void testParallel() throws IOException {
    Runner.path("classpath:Features/abc.feature")
            .tags("@abc")
            .hook(new ReportportalHook())
            .parallel(1);
}

执行完成后target目录未生成日志文件,项目结构如下:

src/test/java
 |
 |--feature--abc.feature
 |--TestRunner.java    
 |--logback-test.xml    

已从指定GitHub地址复制logback-test.xml到src/test/java目录,同时遇到SLF4J错误:

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [jar:file:/C:/Users/myComp/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Ignoring binding found at [jar:file:/E:/workspace/proj/Final/lib/DigitalSigner.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Ignoring binding found at [jar:file:/E:/workspace/proj/Final/lib/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.

当前pom文件依赖配置:

<dependency>
  <groupId>slf4j-api-1.7.5</groupId>
  <artifactId>slf4j-api-1.7.5</artifactId>
  <scope>system</scope>
  <version>1.0</version>
  <systemPath>${project.basedir}/lib/slf4j-api-1.7.5.jar</systemPath>
</dependency>
<dependency>
  <groupId>slf4j-log4j12-1.7.5</groupId>
  <artifactId>slf4j-log4j12-1.7.5</artifactId>
  <scope>system</scope>
  <version>1.0</version>
  <systemPath>${project.basedir}/lib/slf4j-log4j12-1.7.5.jar</systemPath>
</dependency>

问题根源及解决步骤

1. 修正SLF4J依赖配置错误

你的pom依赖存在两个核心问题:

  • groupId和artifactId格式错误:正确的SLF4J依赖坐标不是把版本号嵌入其中,标准坐标为groupId: org.slf4j,artifactId: slf4j-api/slf4j-log4j12。
  • 使用system scope会跳过Maven依赖管理,极易引发版本冲突,不建议使用。

替换为标准Maven依赖(以Logback绑定为例,Karate官方推荐):

<!-- SLF4J API 1.7.x系列最新兼容版 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
    <scope>test</scope>
</dependency>
<!-- Logback日志实现绑定 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
    <scope>test</scope>
</dependency>

若坚持使用log4j12绑定,替换为:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.36</version>
    <scope>test</scope>
</dependency>

2. 调整logback配置文件位置

Logback默认从src/test/resources目录加载配置文件,你把logback-test.xml放在src/test/java下,Maven不会将其识别为资源文件,导致Logback无法读取配置生成日志。

操作:将logback-test.xml移至src/test/resources目录(无此目录则新建)。

3. 确保日志配置包含文件输出

检查logback-test.xml是否配置了输出到target目录的文件Appender,示例配置如下:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${project.build.directory}/karate-tests.log</file>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<root level="info">
    <appender-ref ref="FILE"/>
    <appender-ref ref="STDOUT"/>
</root>

4. 排除冲突的依赖

错误日志显示存在多个冲突的SLF4J绑定包(不同版本的logback-classic、DigitalSigner.jar内的绑定),需在pom中排除这些冗余依赖。例如:

<dependency>
    <!-- 你的其他业务依赖 -->
    <exclusions>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

同时检查项目lib目录下的DigitalSigner.jar,若其内置SLF4J绑定,建议替换为无绑定的版本。

内容的提问来源于stack exchange,提问作者user13245465

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:40:19