有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

测试中的java捕获日志

我试图在测试中捕获bean分配日志-我已经测试了代码,并将成功捕获我的类中的日志-但当我尝试在spring类上执行此操作时,它似乎不起作用-以下是我用于尝试和捕获的代码:

    LoggerContext context = (LoggerContext) (LoggerFactory.getILoggerFactory());
    Logger log = context.getLogger("org.springframework.beans.factory.support.DefaultListableBeanFactory");
    log.setLevel(Level.DEBUG);
    MyAppender appender = new MyAppender();
    appender.setContext( context);
    log.addAppender( appender  );
    SpringApplication newApplication = new SpringApplication( Application.class);
    newApplication.run( new String [] {});

现在,如果我跟踪并查看spring正在使用的记录器-它看起来像是一个完全不同的记录器样式-(它连接到一个logmanager,而不是loggercontext)-然后深入研究,它看起来可能是一个不同的上下文

知道我做错了什么吗?知道我如何在单元测试中捕获Springbean创建日志吗


共 (3) 个答案

  1. # 1 楼答案

    如果在测试下的类中使用静态记录器,则可以使用Powermock模拟记录器并断言输出,如下所述in this question。 我们在Spring测试中使用它,格式和样式都是一样的

  2. # 2 楼答案

    Spring boot默认使用Logback logger 它使用LogbackLogging系统实现 从AbstractLogging系统扩展而来 Spring引导日志系统在初始化上下文之前运行 要覆盖默认属性,可以定义logback。xml或logback spring。xml 也可以使用应用程序。用于定义日志配置的yml或属性文件:

    伐木。级别。*:它用作包名的前缀,用于设置日志级别。 登录中。文件:它配置一个日志文件名以将消息记录到文件中。我们还可以用绝对路径配置文件名。 登录中。路径:它只配置日志文件的路径。Spring boot创建一个名为Spring的日志文件。日志 登录中。图案控制台:它在控制台中定义日志记录模式。 登录中。图案文件:它定义了文件中的日志模式。 登录中。图案级别:定义渲染日志级别的格式。默认值为%5p

    正如文件所说: 您可以通过使用org命令强制Spring Boot使用特定的日志系统。springframework。靴子登录中。日志系统属性。该值应该是LoggingSystem实现的完全限定类名。您还可以使用none值完全禁用Spring Boot的日志记录配置

  3. # 3 楼答案

    对任何感兴趣的人来说,这终于对我起作用了:

    Logger logger = Logger.getLogger(
            "org.springframework.beans.factory.support.DefaultListableBeanFactory");
    logger.addHandler( this );
    logger.setLevel( java.util.logging.Level.FINE);
    _logger = logger;
    

    现在我可以捕获、跟踪和计时所有bean分配