I need to create a log file for each test that runs. I was looking here and there and came up with this, but I am still getting this file: logFileName_IS_UNDEFINED.log where all log is stored but also I have new log files created, but they are empty.
What am I doing wrong?
Logback configuration
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-30(%d{HH:mm:ss.SSS} | %-5level | ) %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${logFileName}.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
Cucumber listener:
@Slf4j
public class CustomTestListener implements ConcurrentEventListener {
File logFile;
//other code
private void handleCaseStarted(TestCaseStarted t) {
createLogFile(t.getTestCase().getName());
log.info("[TEST STARTED] " + t.getTestCase().getName());
}
private void createLogFile(String testCase){
MDC.put("logFileName", "head1");
Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
FileAppender fileAppender = new FileAppender();
logFile = new File(String.format("%s.log", testCase));
LoggerContext loggerContext = rootLogger.getLoggerContext();
loggerContext.putProperty("logFileName", testCase);
fileAppender.setName(testCase);
fileAppender.setFile(logFile.getAbsolutePath());
fileAppender.setContext(loggerContext);
fileAppender.setPrudent(true);
fileAppender.start();
rootLogger.addAppender(fileAppender);
}
}
Setted in lombock config
lombok.log.fieldIsStatic=false