JUnit 実行用の log4j2 設定を指定する

JUnit テストケースコードで、log4j2log4j.configurationFile 属性を書きかえれば良い。
以前、
oboe2uran.hatenablog.com
を書いて悩んだが、
開発 IDEEclipseを使っているのであれば、、
test/resources/ の下に、JUnit で実行する時のための
log4j2.xml を用意して使用すれば良いだけで、main/resources/ に配置する log4j2.xml
とは、異なるファイル名で用意して指定すれば良いのである。

test/resources/test-log4j2.xml を用意したとして、、
JUnit テストケースプログラム

public class UserSendTest {
    @Rule  public TestName testName = new TestName();

    @BeforeClass
    public static void initialize(){
        System.setProperty("log4j.configurationFile","test-log4j2.xml");
    }

    @After
    public void after(){
        File logbackupdir = new File("/result/" + testName.getMethodName());
        logbackupdir.mkdirs();
        LogManager.shutdown();
        try{
            Files.move(Paths.get("/work/console.log"),
                       Paths.get(logbackupdir.getAbsolutePath() + "/console.log"),
                       StandardCopyOption.REPLACE_EXISTING);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

@BeforeClass で、System.setProperty で設定する。
@After で、テストケースメソッド毎のログを別のディレクトリに退避させている。
退避させるために、一旦、 LogManager.shutdown(); を実行するが、次のテストケースでログ出力メソッドが
呼び出されば、自動で設定どおりにログ出力をする。

(例として、、)
main/resources/log4j2.xml は、、

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
  <Properties>
    <Property name="format1">[%d{yyyy-MM-dd HH:mm:ss.SSS}],[%-5p], %c, %m%n</Property>
    <Property name="logfile">./log/batch.log</Property>
    <Property name="logfile-archive">./log/batchg_%d{yyyy-MM-dd}-%i.log</Property>
  </Properties>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout>
        <pattern>${format1}</pattern>
      </PatternLayout>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="TRACE">
      <AppenderRef ref="Console" level="INFO"/>
    </Root>
    <Logger name="software.amazon.awssdk" level="WARN" />
    <Logger name="software.amazon.awssdk.request" level="INFO" />
    <Logger name="org.apache.ibatis.transaction" level="WARN" />
    <Logger name="org.mybatis.guice.transactional" level="WARN" />
    <Logger name="jp.mytarget" level="INFO" />
  </Loggers>
</Configuration>

test/resources/test-log4j2.xml は、、

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
  <Properties>
    <Property name="format1">[%d{yyyy-MM-dd HH:mm:ss.SSS}],[%-5p], %c, %m%n</Property>
    <Property name="logfile">./log/batch.log</Property>
    <Property name="logfile-archive">./log/batchg_%d{yyyy-MM-dd}-%i.log</Property>
  </Properties>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout>
        <pattern>${format1}</pattern>
      </PatternLayout>
    </Console>
    <File name="file" fileName="/work/console.log">
      <PatternLayout>
        <pattern>${format1}</pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="TRACE">
      <AppenderRef ref="Console" level="DEBUG"/>
      <AppenderRef ref="file" level="DEBUG"/>
    </Root>
    <Logger name="software.amazon.awssdk" level="WARN" />
    <Logger name="software.amazon.awssdk.request" level="INFO" />
    <Logger name="org.apache.ibatis.transaction" level="WARN" />
    <Logger name="org.mybatis.guice.transactional" level="WARN" />
    <Logger name="jp.mytarget" level="DEBUG" />
  </Loggers>
</Configuration>