前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot2启动信息去除CONDITIONS EVALUATION REPORT后引发的思考

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

原创
作者头像
lyb-geek
修改2020-07-15 17:39:46
5.7K0
修改2020-07-15 17:39:46
举报

前言

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

image.png
image.png

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

org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

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

logging:
  level:
    org:
      springframework:
        boot:
          autoconfigure:
            logging: info

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

排查

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

验证

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

 <logger level="info" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

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

image.png
image.png

很明显这次我们成功了

Q&A

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

会生效

验证

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

logging:
  level:
    org:
      springframework:
        boot:
          autoconfigure:
            logging: info

启动查看日志信息

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

 <logger level="debug" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

application.yml配置日志级别为info

logging:
  org:
    springframework:
      boot:
        autoconfigure:
          logging: info

启动查看控制台

image.png
image.png

验证二

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

 <logger level="info" name="org.springframework.boot.autoconfigure.logging"  additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="logFile" />
    </logger>

application.yml配置日志级别为debug

logging:
  org:
    springframework:
      boot:
        autoconfigure:
          logging: debug

启动查看控制台

image.png
image.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.png
logback.png
logback-extensions .png
logback-extensions .png

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

总结

其实我第一次在配置

logging.level.org.springframework.boot.autoconfigure: info

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 排查
  • 验证
  • Q&A
  • 结论
  • 延展
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档