spring-cloud logback日志初始化问题

     记得在之前的博客中讨论过spring-boot中logback的启动问题,见:http://blog.csdn.net/jthink_/article/details/52513963
     当时讨论了loback会初始化两次的问题以及如何只让logback自己初始化,当时的版本是1.3.6。
     最近在调研spring cloud相关的技术,当加入spring cloud的时候发现logback惊人得初始化了3次,见下面截图
spring-cloud logback日志初始化问题_第1张图片
这个是logback本身的初始化
spring-cloud logback日志初始化问题_第2张图片
这个是spring cloud的初始化,可以看到主要是BootstrapApplicationListener里面来调用的(最终还是调用的spring boot里面相关的代),加入了spring cloud依赖以后主要增加了3个listener,这是其中之一,其他两个是:LoggingSystemShutdownListener(个人猜测这个就是当时研究的spring boot中的第二个坑,见:http://blog.csdn.net/jthink_/article/details/52613953、RestartListener
spring-cloud logback日志初始化问题_第3张图片
这个是spring boot的初始化
以前的解决方法是去掉这几个Listener,那么新版其实有一种更简单的解决方法,我们打开org.springframework.boot.logging.LoggingSystem,可以看到如下代码:
spring-cloud logback日志初始化问题_第4张图片
第三行里面如果启动参数中指定的该类的值为none的话,那么使用的是NoOpLoggingSystem这个类,这个类什么都没做,所以默认的就不初始化logback了,这样只剩下了logback自己初始化了,完美解决该问题。启动的时候加入:-Dorg.springframework.boot.logging.LoggingSystem=none
注意:1.3.6版本中没有none的这个判断,所以在低版本的时候还是需要去掉那些相应的Listener。

分享一个项目:https://github.com/JThink/SkyEye对java、scala等运行于jvm的程序进行实时日志采集、索引和可视化,对系统进行进程级别的监控,对系统内部的操作进行策略性的报警、对分布式的rpc调用进行trace跟踪以便于进行性能分析。欢迎对分布式跟踪感兴趣的交流~~,交流群:624054633

你可能感兴趣的:(spring-boot,spring,cloud,微服务,spring,cloud学习笔记)