Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在测试中捕获日志_Java_Spring - Fatal编程技术网

Java 在测试中捕获日志

Java 在测试中捕获日志,java,spring,Java,Spring,我正在尝试在测试中捕获bean分配日志-我已经测试了代码,并且将成功地从我的类中捕获日志-但是当我尝试在spring类上执行此操作时,它似乎不起作用-以下是我用于尝试和捕获的代码: LoggerContext context = (LoggerContext) (LoggerFactory.getILoggerFactory()); Logger log = context.getLogger("org.springframework.beans.factory.support.

我正在尝试在测试中捕获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创建日志吗?

spring boot默认使用Logback logger 它使用LogbackLogging系统实现 从AbstractLoggingSystem扩展而来 Spring引导日志系统在初始化上下文之前运行 要覆盖默认属性,可以定义logback.xml或logback-spring.xml 或者,您可以使用application.yml或属性文件定义日志配置:

logging.level.*:它用作包名的前缀,用于设置日志级别。 logging.file:将日志文件名配置为将消息记录到文件中。我们还可以用绝对路径配置文件名。 logging.path:它只配置日志文件的路径。Spring boot创建一个名为Spring.log的日志文件 logging.pattern.console:在控制台中定义日志模式。 logging.pattern.file:在文件中定义日志模式。 logging.pattern.level:定义呈现日志级别的格式。默认值为%5p

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

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

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

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

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

谢谢-如前所述,我正试图在单元测试中完成所有这一切,绝对不希望有任何更改应用程序行为的风险,因此配置属性已过时。此外,正如您在上面看到的,我正在设置logback appender,所以您知道我为什么不获取springboot信息吗?thxI认为您使用的是不同的上下文为什么不为基于spring分析的appender使用
spring logback.xml
?为您的测试创建一个概要文件。