I am trying to setup logback configuration to create separate folder for each test run and separate log file for each test case within the folder.
To achieve something like:
TestRun1 (16.04.2021T12:00) having two test cases
../target/logs/16042021_1200/testcase1
../target/logs/16042021_1200/testcase2
TestRun2 (16.04.2021T13:00) having two test cases
../target/logs/16042021_1200/testcase1
../target/logs/16042021_1200/testcase2
../target/logs/16042021_1300/testcase1
../target/logs/16042021_1300/testcase2
I am using gradle, junit5, logback:1.2.3
For now I have created SiftingAppender, to have separate log file for each test case.
logback.xml
<configuration>
<property name="LOG_HOME" value="build/logs/" />
<appender name="SIFTER" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>testName</key>
<defaultValue>ALL</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${testName}" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/log_${testName}.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<root level="debug">
<appender-ref ref="SIFTER"/>
</root>
jUnit test class:
@ExtendWith(LogWatcher.class)
public class JunitTest1 {
private static final Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(JunitTest1.class);
@Test
public void test1() {
logger.info("Start test case1: info");
}
@Test
public void test2() {
logger.info("Start test case2: info");
}
}
LogWatcher.class:
public class LogWatcher implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
String testCaseFullName =
String.format("%s.%s", context.getTestClass().get().getName(),
context.getTestMethod().get().getName());
MDC.put("testName", testCaseFullName);
}
}
So now I am able to write logs to one directory per test case, but I have an issue with creating folder per test execution, I planned to do that by timestamp. Does someone have an idea how to achieve it?
Note1: I tried to use RollingFileAppender but then I can not send the testname to lobback configuration.
Note2: I tried to use timestamp property in configuration and use it as variable in SiftingAppender but it also didn't work.