我正在尝试为我的班级中的记录器创建一个测试。 类示例:
public class Audit{
private static final Logger LOGGER = LoggerFactory.getLogger(Audit.class);
private static final Logger ERROR_LOG = LoggerFactory.getLogger("ERROR");
public static final Logger DEBUG_LOGGER = LoggerFactory.getLogger("DEBUG");
service.... {
}
}
测试我正在尝试运行,带有类名的测试,我正在获取主日志,但没有获取调试/错误日志:
@Test
void testFailure() {
Logger auditFailureLogger = (Logger) LoggerFactory.getLogger(Audit.class);
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
listAppender.start();
auditFailureLogger.addAppender(listAppender);
audit.service(info);
List<ILoggingEvent> logsList = listAppender.list;
assertNotNull(logsList.get(0).getFormattedMessage());
}
如果我使用记录器名称(而不是类名)运行此测试,我会得到一个空列表:
@Test
void testFailure() {
Logger auditFailureLogger = (Logger) LoggerFactory.getLogger("ERROR");
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
listAppender.start();
auditFailureLogger.addAppender(listAppender);
audit.service(info);
List<ILoggingEvent> logsList = listAppender.list;
assertNotNull(logsList.get(0).getFormattedMessage());
}
如何在测试中按名称而不是按类别获取日志?
经过大量测试,我能够运行测试:
@Test
void testFailure() {
Logger auditFailureLogger = (Logger) LoggerFactory.getLogger("ERROR");
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
listAppender.start();
auditFailureLogger.addAppender(listAppender);
audit.service(info);
List<ILoggingEvent> logsList = listAppender.list;
assertNotNull(logsList.get(0).getFormattedMessage());
}
我已将 logback.xml 文件添加到测试资源中
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<configuration debug="true" scan="false">
<!-- ============================================== -->
<!-- Append messages to the failure audit log file -->
<!-- ============================================== -->
<appender name="AUDIT_FAILURE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>TEST %date{yyyy-MM-dd HH:mm:ss.SSS} %msg%n</pattern>
</encoder>
</appender>
<logger additivity="false" level="ALL" name="ERROR">
<appender-ref ref="AUDIT_FAILURE_FILE" />
</logger>
</configuration>