相关疑难解决方法(0)

测试日志输出 Java Spring

我有一个在 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)

要通过此测试,必须将日志级别设置为 …

java junit logback slf4j spring-boot-test

5
推荐指数
1
解决办法
2万
查看次数

未调用自定义 AppenderBase

我正在为我的测试编写一个自定义 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)

java junit logback slf4j

4
推荐指数
1
解决办法
2046
查看次数

标签 统计

java ×2

junit ×2

logback ×2

slf4j ×2

spring-boot-test ×1