View Javadoc
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  }