springboot2启动信息去除CONDITIONS EVALUATION REPORT后引发的思考

2020-07-15 17:39:46 浏览数 (1)

前言

最近启动一个springboot2.2 版本项目时,发现控制台输出

image.pngimage.png

这个日志如果不细看还以为是启动报错,其实这段日志是springboot2的自动装配日志报告。平时我们是不大需要,因此我们可以关闭。关闭的方法也很简单,从控制台打印的日志信息我们可以得知自动装配日志报告是由

代码语言:txt复制
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

这个类触发,而且日志级别是Debug级别。因此要关闭这段日志,只需在application.yml做如下配置

代码语言:txt复制
logging:
  level:
    org:
      springframework:
        boot:
          autoconfigure:
            logging: info

日志级别改为debug级别以上就行了。然后启动见证一下奇迹,奇迹没出现,自动装配日志报告依然坚挺的出现

排查

以多年的编程直觉,我这么写应该是没错的,错的原因可能就是把正确的内容放到不恰当的位置,导致不起作用。带着这个主观臆断的思路,我们可以思考下,正常我们控制台打印日志信息的日志级别会配置在哪里,一个是配置文件比如application.yml,一个是配置在日志文件中(比如logback文件中),当然也可以借助其他工具进行配置(这个我们就不讨论了,因为我不会)

验证

既然我们在application.yml配置不起效果,那我们就在项目中已经配置的logback-spring.xml中加如下内容

代码语言:txt复制
 <logger level="info" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

然后再启动试下,这次看下控制台

image.pngimage.png

很明显这次我们成功了

Q&A

1、当项目中只有application.yml文件时,配置的日志级别是否生效?

会生效

验证

去除项目中的logback-spring.xml,然后在application.yml配置如下内容

代码语言:txt复制
logging:
  level:
    org:
      springframework:
        boot:
          autoconfigure:
            logging: info

启动查看日志信息

代码语言:txt复制
Connected to the target VM, address: '127.0.0.1:59757', transport: 'socket'

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |___, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.5.RELEASE)

2020-07-14 19:08:53.345  INFO 5868 --- [           main] com.nisbos.goods.GoodsApplication        : No active profile set, falling back to default profiles: default
2020-07-14 19:08:54.853  WARN 5868 --- [           main] o.s.boot.actuate.endpoint.EndpointId     : Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.
2020-07-14 19:08:54.874  WARN 5868 --- [           main] o.s.boot.actuate.endpoint.EndpointId 

说明配置生效

2、当项目中同时存在logback-spring.xml和application.yml,同种类包日志级别配置以哪个为准?

以logback-spring.xml配置的日志级别为准

验证一

logback-spring.xml配置日志级别为debug

代码语言:txt复制
 <logger level="debug" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

application.yml配置日志级别为info

代码语言:txt复制
logging:
  org:
    springframework:
      boot:
        autoconfigure:
          logging: info

启动查看控制台

image.pngimage.png

验证二

logback-spring.xml配置日志级别为info

代码语言:txt复制
 <logger level="info" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

application.yml配置日志级别为debug

代码语言:txt复制
logging:
  org:
    springframework:
      boot:
        autoconfigure:
          logging: debug

启动查看控制台

image.pngimage.png

3、当项目中同时存在logback.xml和application.yml,同种类包日志级别配置以哪个为准?

以logback.xml配置的日志级别为准

这个就不贴验证过程了

结论

当项目中同时在application.yml和logback.xml、logback-spring.xml配置同种类包日志级别时,以logback-spring.xml、logback.xml配置的日志级别为准

延展

细心的朋友可能会发现我分别用logback-spring.xml、logback.xml来验证。那logback-spring.xml和logback.xml这两种文件到底有什么区别?

logback.pnglogback.png
logback-extensions .pnglogback-extensions .png

上面的图片来源于springboot官网,从图片我们可以得到几点信息,springboot官方推荐使用logback-spring.xml。理由是如果是用logback.xml,在标准的日志存放的地方(比如src/main/resource),spring将无法完全控制日志的初始化。其次如果使用logback.xml,则没法使用springboot提供的一些扩展功能。比如你在logback.xml使用springProperty或者springProfile标签时,将无法得到预期的效果

总结

其实我第一次在配置

代码语言:txt复制
logging.level.org.springframework.boot.autoconfigure: info

没法去除启动时输出自动装配日志报告后,也曾利用搜索引擎寻找答案。然后得到的答案如下:

如何去除启动自动装配报告.png如何去除启动自动装配报告.png

而且不止一篇都是说这么配置。但我依然很固执没按搜索引擎那样的说,把日志级别调成ERROR。原因是我们控制台保留完整的案发现场,他输出日志级别是debug,因此日志级别调整成debug级别以上就行。

0 人点赞