1 package io.extact.rms.test.junit5;
2
3 import java.util.logging.LogManager;
4
5 import org.junit.jupiter.api.extension.BeforeAllCallback;
6 import org.junit.jupiter.api.extension.ExtensionContext;
7 import org.slf4j.bridge.SLF4JBridgeHandler;
8
9 /**
10 * {@link java.util.logging.Logger JUL}に対する出力をSLF4Jにデリゲートさせる
11 * JUnitExtension。
12 * HelidonはSLF4J経由ではなくJULを使っているためSLF4Jへログ出力を集約するために
13 * この処理が必要となる。
14 */
15 public class JulToSLF4DelegateExtension implements BeforeAllCallback {
16
17 static {
18 // java.util.loggingの出力をSLF4Jへdelegate
19 LogManager.getLogManager().reset();
20 SLF4JBridgeHandler.removeHandlersForRootLogger();
21 SLF4JBridgeHandler.install();
22 }
23
24 @Override
25 public void beforeAll(ExtensionContext context) throws Exception {
26 /*
27 * Helidonを起動するHelidonJunitExtensionもBeforeAllCallback#beforeAllのフックポイントを使っている
28 * HelidonのログをSLF4JへdelegateさせるにはHelidonが起動するまでにdelegate処理を実行する必要がある
29 * がJUnit5が用意する一番最初のフックポイントはbeforeAllののため確実にHelidonより早く呼び出せるポ
30 * イントがない。
31 * このため、beforeAllのコールバックを待たずにクラスがロードされた時点でSLF4Jへのdelegate処理を行っ
32 * ている。
33 * よって、このメソッドはstatic initializerが呼び出されるためのダミーなのでなにも行っていない。
34 */
35 }
36 }