1. 概要

このチュートリアルでは、SpringBootアプリケーションのテストを実行するときにログレベルを設定する方法を学習します。

テストに合格している間はほとんどログを無視できますが、失敗したテストを診断する必要がある場合は、適切なログレベルを選択することが重要になる可能性があります。

2. ログレベルの重要性

ログレベルを正しく構成すると、時間を大幅に節約できます。

たとえば、CIサーバーでテストが失敗しているが、開発マシンを通過している場合、十分なログ出力がない限り失敗したテストを診断できません。 逆に、ログに記録しすぎると、有用な情報を見つけるのが難しくなる可能性があります。

適切な詳細を実現するために、アプリケーションのパッケージのログレベルを微調整できます。 テストでJavaパッケージの方が重要であることがわかった場合は、DEBUGのように低いレベルを指定できます。 同様に、ログにノイズが多すぎるのを避けるために、重要度の低いパッケージに対して INFOまたはERROR、などのより高いレベルを構成できます。

ロギングレベルを設定するさまざまな方法を調べてみましょう。

3. application.propertiesのログ設定

テストでログレベル変更する場合は、 src / test / resources / application.propertiesに設定できるプロパティがあります。

logging.level.com.baeldung.testloglevel=DEBUG

このプロパティは、 com.baeldung.testloglevelパッケージに対してログレベル、特に設定します。

同様に、ルートログレベルを設定することで、すべてのパッケージのログレベルを変更できます。

logging.level.root=INFO

次に、いくつかのログを書き込むRESTエンドポイントを追加して、ログ設定を試してみましょう。

@RestController
public class TestLogLevelController {

    private static final Logger LOG = LoggerFactory.getLogger(TestLogLevelController.class);

    @Autowired
    private OtherComponent otherComponent;

    @GetMapping("/testLogLevel")
    public String testLogLevel() {
        LOG.trace("This is a TRACE log");
        LOG.debug("This is a DEBUG log");
        LOG.info("This is an INFO log");
        LOG.error("This is an ERROR log");

        otherComponent.processData();

        return "Added some log output to console...";
    }

}

予想どおり、テスト でこのエンドポイントを呼び出すと、TestLogLevelControllerからDEBUGログを確認できます。

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

このようにログレベルを設定するのは非常に簡単です。テストに@SpringBootTestという注釈が付けられている場合は、必ずこの方法で設定する必要があります。 ただし、そのアノテーションを使用しない場合は、別の方法でログレベルを構成する必要があります。

3.1. プロファイルベースのロギング設定

設定をsrc/ test / application.properties に入れることはほとんどの状況で機能しますが、1つのテストまたはテストのグループに対して異なる設定を使用したい場合があります。 。

その場合、 ActiveProfiles アノテーションを使用して、テストにSpringプロファイルを追加できます。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class)
@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)
@ActiveProfiles("logging-test")
public class TestLogLevelWithProfileIntegrationTest {

    // ...

}

ロギング設定は、 src / test /resources内の特別なapplication-logging-test.propertiesファイルにあります。

logging.level.com.baeldung.testloglevel=TRACE
logging.level.root=ERROR

説明した設定を使用してテストからTestLogLevelControllerを呼び出すと、コントローラーからの TRACE ログが表示され、INFOログはなくなります。他のパッケージから:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4. ログバックの構成

SpringBootでデフォルトで使用されるLogbackを使用する場合、 src / test/resources内のlogback-test.xmlファイルでログレベルを設定できます。

<configuration>
    <include resource="/org/springframework/boot/logging/logback/base.xml"/>
    <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>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <logger name="com.baeldung.testloglevel" level="debug"/>
</configuration>

上記の例は、テスト用のログバック構成でログレベルを設定する方法を示しています。 ルートログレベルはINFOに設定され、com.baeldung.testloglevelパッケージのログレベルはDEBUGに設定されます。

繰り返しますが、上記の設定を適用した後、出力を確認しましょう。

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4.1. プロファイルベースのログバック構成

テスト用にプロファイル固有の構成を設定する別の方法は、プロファイルのapplication.propertieslogging.configプロパティを設定することです。

logging.config=classpath:logback-testloglevel.xml

または、クラスパスに単一のLogback構成が必要な場合は、 logback.xmlspringProfile要素を使用できます。

<configuration>
    <include resource="/org/springframework/boot/logging/logback/base.xml"/>
    <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>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <springProfile name="logback-test1">
        <logger name="com.baeldung.testloglevel" level="info"/>
    </springProfile>
    <springProfile name="logback-test2">
        <logger name="com.baeldung.testloglevel" level="trace"/>
    </springProfile>
</configuration>

ここで、プロファイルlogback-test1を使用したテストでTestLogLevelControllerを呼び出すと、次の出力が得られます。

2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

逆に、プロファイルを logback-test2 に変更すると、出力は次のようになります。

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

5. Log4Jの代替

または、 Log4J2 を使用する場合は、 src / test / resources:内のlog4j2-spring.xmlファイルでログレベルを設定できます。

<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="com.baeldung.testloglevel" level="debug" />

        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

application.propertieslogging.configプロパティを設定することにより、Log4J構成のパスを設定できます。

logging.config=classpath:log4j-testloglevel.xml

最後に、上記の設定を適用した後の出力を確認しましょう。

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

6. 結論

この記事では、SpringBootアプリケーションをテストするときにログレベルを設定する方法を学びました。 次に、それを構成するさまざまな方法を検討しました。

Spring Bootのapplication.propertiesでログレベルを設定するのが最も簡単なオプションです。特に、@SpringBootTestアノテーションを使用している場合はそうです。

いつものように、これらの例のソースコードはGitHubにあります。