当前位置: 首页 > 面试题库 >

如何通过JUnit测试拦截SLF4J(带回送)日志记录?

南宫胡媚
2023-03-14
问题内容

是否可以InputStream通过JUnit测试用例以某种方式拦截日志记录(SLF4J + logback)并获取(或其他可读的信息)…?


问题答案:

您可以创建自定义附加程序

public class TestAppender extends AppenderBase<LoggingEvent> {
    static List<LoggingEvent> events = new ArrayList<>();

    @Override
    protected void append(LoggingEvent e) {
        events.add(e);
    }
}

配置logback-test.xml以使用它。现在我们可以检查测试中的日志记录事件:

@Test
public void test() {
    ...
    Assert.assertEquals(1, TestAppender.events.size());
    ...
}


 类似资料:
  • 在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记

  • 问题内容: 这是一个第三方应用程序,在我们的应用程序服务器上生成大量的登录信息。像这样: 如何关闭slf4j的输出?我已经在.war文件中查找了slf4j的一些配置,但没有找到任何配置。他们的网站也没有帮助 问题答案: slf4j只是实际日志后端(此处是覆盖jakarta commons日志记录)的一个漏斗,这是您必须配置的摆脱某种消息的程序。对于登录,这是适当的配置代码段: 对于log4j,它非

  • 有没有更简单的方法来完成我想要的?如果这是最好的方法,那么我做错了什么?

  • 我根据JBoss文档创建了一个拦截器。 为了测试拦截器,我把: 现在,我想使用WeldJUnit4Runner类在单元测试中测试这个拦截器。 现在的预期产出当然是 但结果却是 主要问题是,如果我在测试中注入bean,这也是正确的:我调用的bean的第一个方法被拦截,但是如果这个方法调用另一个方法,拦截器就不会被调用。 任何想法都非常感谢! 我只是按照@adrobisch的建议修改了我的代码,效果如

  • 问题内容: 我想去日记(系统化)。 到目前为止,我只发现了读取日志记录的python模块(不是我想要的)或像这样工作的模块: 问题答案: python-systemd有一个JournalHandler可与日志框架一起使用。 从文档中:

  • 问题内容: 许多人不确定如何将Liquibase的日志记录修复到控制台或文件中。 是否可以将liquibase日志记录到slf4j? 问题答案: 有,但是有点模糊。使用SLF4J和Log4J引用修复的liquibase日志记录: 有 简单的方法 ,通过在依赖下降: 现在,前两个是您的日常日志记录框架(slf4j api和log4j实现)。这些是您对标准log4j依赖项的补充,因为它们所做的只是路由