我有一个在 java 10 上运行的 spring boot 2 应用程序,使用 SLF4J 和 logback 作为底层记录器。
给定以下弹簧组件:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class MyClass {
private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
public void hello() {
// more logic...
LOG.trace("World");
}
}
Run Code Online (Sandbox Code Playgroud)
以及希望验证日志输出(想象一个更复杂的场景,其中日志将包含变量和上下文信息)或生成日志消息的事实被认为是关键的测试。
import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.test.rule.OutputCapture;
import static org.hamcrest.Matchers.containsString;
public class MyClassTest {
private final MyClass myClass = new MyClass();
@Rule
public final OutputCapture outputCapture = new OutputCapture();
@Test
public void successShouldLogSuccessMessages() {
myClass.hello();
outputCapture.expect(containsString("World"));
}
}
Run Code Online (Sandbox Code Playgroud)
要通过此测试,必须将日志级别设置为 …
我正在为我的测试编写一个自定义 AppenderBase 并在 logback-test.xml 中配置它 但是 append() 函数没有被调用。
import ch.qos.logback.core.AppenderBase;
import org.apache.log4j.spi.LoggingEvent;
import java.util.ArrayList;
import java.util.List;
public class TestAppender extends AppenderBase<LoggingEvent> {
public static List<LoggingEvent> events = new ArrayList<>();
@Override
protected void append(LoggingEvent e) {
events.add(e);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的配置文件:logback-test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false">
<contextName>logging</contextName>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %msg%n
</pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="CONSOLE" />
</root>
<logger name="com.egencia.library" level="INFO" />
<appender name="map" class="com.egencia.service.contact.controller.TestAppender" />
<root level="ERROR">
<appender-ref ref="map"/>
</root> …Run Code Online (Sandbox Code Playgroud)