0

Cucumber-jvm で実行している Grovvy 単体テストでログを有効にしようとしています。

私のテストでは、インポートしました:

import groovy.util.logging.Slf4j

その後追加

@Slf4j

ただし、これらのコマンドのいずれかを実行すると:

mvn test -Dgmaven.logging=DEBUG
mvn test -Dgmaven.logging=TRACE

このメソッドは「[WARN] log.isWarnEnabled()」のみを出力します

void debugLogging(){
    println("~~~~~ debugLogging() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    if(log.isTraceEnabled()){
        println("log.isTraceEnabled()")
        log.trace("log.isTraceEnabled()")
    }
    if(log.isDebugEnabled()){
        println("log.isDebugEnabled()")
        log.debug("log.isDebugEnabled()")
    }
    if(log.isInfoEnabled()){
        println("log.isInfoEnabled()")
        log.info("log.isInfoEnabled()")
    }
    if(log.isWarnEnabled()){
        println("log.isWarnEnabled()")
        log.warn("log.isWarnEnabled()")
    }
}

これが私の ./src/test/resources/logback.xml です:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <!-- Use level="DEBUG" for more detailed logging -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

単体テストでログ レベルを変更するにはどうすればよいですか?

4

1 に答える 1

1

GMaven が logback を使用しない難しい方法を発見しました。このプラグインは、ゴシップと呼ばれる Sonatype のデフォルトの SLF4J を利用するように設計されています(GMaven の詳細設定で説明されています) 。

したがって、これはlogback.xmlファイルが無視された理由を説明している可能性があります (ただし、単体テストから実行すると、SLF4J 呼び出しが構成済みのランタイム プロバイダーにリダイレクトされると思われるかもしれません) 。

gmaven.loggingプロパティを単体テストに渡すには、次のように Surefire プラグイン内で設定してみてください。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
      <systemPropertyVariables>
        <gmaven.logging>DEBUG</gmaven.logging>
      </systemPropertyVariables>
    </configuration>
  </plugin>

お役に立てれば。

アップデート

Maven プラグインを開発しているときに、この問題に遭遇しました。私の課題は、SLF4J を使用していないライブラリで発生したロギング呼び出しをキャプチャすることでした....

この問題を解決するために、次のようにブリッジ API の 1 つをプラグインの依存関係セクションに追加しました。

  <plugin>
    ..
    ..
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </plugin>

これにより、コモンズのロギング呼び出しが SLF4J 実装に再ルーティングされます。これは、Maven の場合はゴシップになります。

于 2012-11-14T23:06:00.740 に答える