Spring-boot:尽管有Log级别,但仍会记录Servlet环境

时间:2018-02-06 04:52:46

标签: spring-boot

最近从Spring-Boot 1.5.6.RELEASE升级到1.5.8.RELEASE

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

但是,application.properties文件未指定DEBUG级别的日志记录。即使为该类明确设置警告或错误级别也无济于事。

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

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

未启用调试,但它会记录。在从application.properties读取日志级别之前,它似乎正在执行此操作。

对此有任何解释,或解决此问题吗?

application.properties具有:

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

In the code, I see a comment关于记录初始化的延迟。

1 个答案:

答案 0 :(得分:0)

我设法通过创建自己的WebApplicationInitializer类来抑制此错误,在该类中我明确将违规日志类别设置为INFO的日志级别

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}")
}

感觉就像是黑客。所以,如果有人有更好的答案,请发帖。