JUnit テストケースコードで、log4j2 の log4j.configurationFile 属性を書きかえれば良い。
以前、
oboe2uran.hatenablog.com
を書いて悩んだが、
開発 IDE を Eclipseを使っているのであれば、、
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>