JulToSLF4DelegateExtension.java
package io.extact.rms.test.junit5;
import java.util.logging.LogManager;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.slf4j.bridge.SLF4JBridgeHandler;
/**
* {@link java.util.logging.Logger JUL}に対する出力をSLF4Jにデリゲートさせる
* JUnitExtension。
* HelidonはSLF4J経由ではなくJULを使っているためSLF4Jへログ出力を集約するために
* この処理が必要となる。
*/
public class JulToSLF4DelegateExtension implements BeforeAllCallback {
static {
// java.util.loggingの出力をSLF4Jへdelegate
LogManager.getLogManager().reset();
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
/*
* Helidonを起動するHelidonJunitExtensionもBeforeAllCallback#beforeAllのフックポイントを使っている
* HelidonのログをSLF4JへdelegateさせるにはHelidonが起動するまでにdelegate処理を実行する必要がある
* がJUnit5が用意する一番最初のフックポイントはbeforeAllののため確実にHelidonより早く呼び出せるポ
* イントがない。
* このため、beforeAllのコールバックを待たずにクラスがロードされた時点でSLF4Jへのdelegate処理を行っ
* ている。
* よって、このメソッドはstatic initializerが呼び出されるためのダミーなのでなにも行っていない。
*/
}
}