在我的 Spring Boot 项目中,我有一些测试类,我使用 ListAppender 检查日志消息,并且它们运行良好。这些就像:
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
...
}
当我尝试检查 Level.TRACE 消息时,出现了问题。 我们使用 logback,并且它在主应用程序中仅配置为 DEBUG 级别,因此我将 logback-test.xml 添加到我的测试上下文中,以将日志记录级别设置为 TRACE。 当我单独运行我的测试类时,一切都很好,并且我收到了很好的日志消息,例如
21:31:18.332 [main] TRACE a.b.c.MyService - Processing Started: File ...
我还有在 Spring Boot 上下文下运行的测试,例如
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisServiceTest {
...
}
这种类型的测试会导致 logback 使用主日志记录配置,并且我得到如下日志输出
{"timestamp":"2024-07-26T08:32:56.172-07:00","logger":"a.b.c.RedisService","level":"INFO","thread":"[main]","message":"Caching file size in redis with hashKey: ..."}
当我运行整个测试套件时,它就会崩溃。 当我的 SpringBootTest 在普通 Mockito 测试之前运行时,记录器会卡在非测试日志配置中,并且我的 TRACE 消息不会被记录,因此我的测试失败。 我尝试在 SpringBootTest 类上使用 @DirtiesContext 注释,但这并不能解决问题。 如果我删除 SpringBootTest 类,测试套件运行正常。 如何重置我的日志记录上下文?
其他配置信息:
好吧,我找到了我的问题。 我永远不应该将 logback-test.xml 添加到测试资源中。 我删除了该文件并通过添加修改了主 logback 配置文件
<springProfile name="test">
<logger name="com.mycompany.myproject" level="trace"/>
</springProfile>
一切都很好。