2017-05-29 14 views
4

My Spring BootテストスタックはMaven + Surefire + JUnit4です。私は@RunWith(SpringJUnit4ClassRunner.class)でテストに注釈をつけています。テスト中にSpringロギングレベルを設定するには?

私はこのラインでの私のプロジェクトのルートにapplication.propertiesを持っている:

logging.level.root=INFO 

春のブートアプリケーションを実行しているとき、これは、ロギングを制御し、それが通常の実行に取り組んでいます。私はJUnit4テストを実行するたびに

しかし、私はこのようなデバッグ出力のページでスパムいます:

.... 
17:43:20.500 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'autoConfigurationReport' 
17:43:20.500 [main] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader - Registered bean definition for imported class 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration' 
17:43:20.501 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.boot.autoconfigure.condition.BeanTypeRegistry' 
17:43:20.502 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'autoConfigurationReport' 
.... 

すべてこのスパムは、それはほとんど不可能実際に関連する部分を参照することができます。ログ出力レベルをテスト出力に適用するにはどうすればよいですか?

ログを明示的に設定していないため、ログバックはデフォルトで使用されています。

+0

'/ test/resources'に' application.properties'がありますか? '-Dspring.foo.bar = baz'でテストを実行するときに、任意のプロパティを渡すこともできます。 – jonrsharpe

+0

@jonrsharpe私はそこにapplication.propertiesをコピーしようとしましたが、何も変更されませんでした。 –

答えて

4

でユニットテストに注釈を付けるには、テスト・リソース・レベルで別々logback-test.xml -fileを提供することができます。このファイルには、あなたのような希望の出力をターゲットにしたログレベルに関する設定を追加することができます。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
    </layout> 
    </appender> 

    <logger name="com.your.package" level="DEBUG"> 
    <appender-ref ref="CONSOLE"/> 
    </logger> 

    <logger name="org.springframework" level="WARN"> 
    <appender-ref ref="CONSOLE"/> 
    </logger> 

    <logger name="org.hibernate" level="WARN"> 
    <appender-ref ref="CONSOLE"/> 
    </logger> 

    <logger name="org.eclipse" level="WARN"> 
    <appender-ref ref="CONSOLE"/> 
    </logger> 

    <logger name="jndi" level="WARN"> 
    <appender-ref ref="CONSOLE"/> 
    </logger> 

    <logger name="org.apache.http.wire" level="WARN"> 
     <appender-ref ref="CONSOLE"/> 
    </logger> 

    <root level="DEBUG"> 
     <appender-ref ref="CONSOLE"/> 
    </root> 

</configuration> 

これはあなたがログ出力の減少へのパスに多少お役に立てば幸いです。それ以上はlogback自身のページで文書化されています。一番上のセクションで述べた

https://logback.qos.ch/manual/configuration.html

その: 1:

は、私たちは自分自身を設定しようとする次のlogback初期化ステップを議論することから始めましょう。 Logbackは、クラスパスでlogback-test.xmlというファイルを検索しようとします。

2.このようなファイルが見つからない場合、logbackはclasspathにlogback.groovyというファイルを見つけようとします。そのようなファイルが見つからない3.Ifは、それがクラスパスにファイルlogback.xmlをチェック

..そのようなファイルが見つからない4.If

、(JDK 1.6で導入された)サービスプロバイダーローディング機能クラスパスのMETA-INF \ services \ ch.qos.logback.classic.spi.Configuratorファイルを参照して、com.qos.logback.classic.spi.Configuratorインタフェースの実装を解決します。その内容には、目的のコンフィグレーター実装の完全修飾クラス名を指定する必要があります。

5.上記のいずれも成功しなかった場合、Logbackは自動的にBasicConfiguratorを使用して自動的に構成され、ロギング出力がコンソールに送られます。

+0

これは大いに役立ちます。ログアウトレベルの設定に関するLogbackの出力の1ページだけがスパムです。 Logbackが設定される前に他のいくつかのロガーが使用されているように見えます。 –

+0

アペンダー定義と参照がなければ、実際には完全に機能します!マイケルヘグナーの答えを試してみてください:https://stackoverflow.com/a/35254610/2445864 –

+0

ニース!私のアプリケーションの中の私の参考文献も削除しました。そして、それはすべてのオーバーヘッドの無意味な出力を取り除くようです。ありがとう! :) – vegaasen

1

はそうと、ワイルドカードでのログ構成を設定してみてください:

logging.level.*=INFO 

また、あなただけのテストの目的のために別のプロパティファイルを使用することができます。ただ、一般的な観点から

@TestPropertySource(locations="classpath: application.test.properties") 
関連する問題