提问者:小点点

Spring引导:无论日志级别如何,都会记录 Servlet 环境


最近从Spring-Boot 1.5.6 .发行版升级到1.5.8 .发行版

在这样做时,我们注意到环境被注销为“DEBUG”和类别“StandardServletEnvironment”。

但是,application.properties文件没有指定DEBUG级别的日志记录。即使为该类显式设置警告或错误级别也不会产生任何影响。

执行日志记录的代码位于 org.springframework.core.env.AbstractGEF的构造函数中:

public AbstractEnvironment() {
        customizePropertySources(this.propertySources);
        if (logger.isDebugEnabled()) {
            logger.debug("Initialized " + getClass().getSimpleName() + " with PropertySources " + this.propertySources);
        }
    }

调试未启用,但它会记录。似乎它在从 application.properties.读取日志级别之前正在这样做

对此有什么解释,或者解决办法吗?

应用程序属性具有:

logging.level.root=INFO
logging.level.com.mycompany=DEBUG

在代码中,我看到一条关于日志初始化被推迟的注释。


共1个答案

匿名用户

我设法通过创建自己的WebApplicationInitializer类来抑制这个错误,在这个类中,我显式地将有问题的日志类别设置为信息的日志级别

class MyWebApplicationInitializer implements WebApplicationInitializer{
    @Override
    void onStartup(ServletContext servletContext) throws ServletException {

        String category = 'org.springframework.web.context.support.StandardServletEnvironment'

        ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(category)
        logbackLogger.setLevel(ch.qos.logback.classic.Level.INFO)
        logbackLogger.info("Setting log level in ${this.class.name}, for ${logbackLogger.name}, to ${logbackLogger.level}")
}

感觉就像一个黑客。因此,如果有人有更好的答案,请发布。