我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈因为项目中的Logback于Nacos的Logback冲突导致的项目启动失败 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈因为项目中的Logback于Nacos的Logback冲突导致的项目启动失败 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO

问题: 

环境 :  Nacos 2.2.1   ,   Spring-cloud   Hoxton.SR1 , com.alibaba.cloud.version  2.2.8 (留意这个版本)

        最近新搭建了一次虚拟机, 然后重新部署了Nacos , 同时也在一个新项目里引入了Nacos 的服务注册功能 , 以下是服务Pom版本管理配置

            1.8        UTF-8        Hoxton.SR1        2.2.8.RELEASE                                                     org.springframework.boot                spring-boot-dependencies                2.2.2.RELEASE                pom                import                                        org.springframework.cloud                spring-cloud-dependencies                ${spring-cloud.version}                pom                import                                                    com.alibaba.cloud                spring-cloud-alibaba-dependencies                ${com.alibaba.cloud.version}                pom                import                        

然后再实际使用模块pom文件中引入服务注册和配置管理 

                                com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery                                   com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config            

application.ymal 的配置如下 

spring:  profiles: dev  cloud:    nacos:      username: nacos      password: nacos      discovery:        server-addr: 192.168.30.128:8848        namespace: 281222d0-6848-4017-8768-c81df219e12      config:        bootstrap:          enabled: true        server-addr: ${spring.cloud.nacos.discovery.server-addr}        file-extension: yml        namespace: 281222d0-6848-4017-8768-c81df219e12        auto-refresh: true

此时启动项目问题就显露了 , 在没有加上  spring-cloud-starter-alibaba-nacos-config 这个maven配置的时候服务是可以正常启动的 , 然后加了之后 服务根本就启动不起来 , 报错如下 

2023-03-31 10:30:06.710 ERROR 40924 --- [           main]o.s.boot.SpringApplication              : 826 : Application run failedjava.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/config.log" as that given for appender [CONFIG_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/naming.log" as that given for appender [NAMING_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/remote.log" as that given for appender [REMOTE_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/config.log" as that given for appender [CONFIG_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/naming.log" as that given for appender [NAMING_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[NAMING_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - 'File' option has the same value "C:\Users\huang\logs/nacos/remote.log" as that given for appender [REMOTE_LOG_FILE] defined earlier.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.ERROR in ch.qos.logback.core.rolling.RollingFileAppender[REMOTE_LOG_FILE] - For more information, please visit http://logback.qos.ch/codes.html#earlier_fa_collisionat org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169)at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118)at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:313)at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:288)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:76)at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345)at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)at com.ko.assy.db.ms.KoAssyDbApplication.main(KoAssyDbApplication.java:29)

看表象 , 是Logback 引起的问题 , 初步怀疑是可能因为冲突了 , 因为我本地也使用了 Logback 的配置 ,  Logbak内容入如下

    logback                                                                        DEBUG                            ${CONSOLE_LOG_PATTERN}                        UTF-8                        ${log.path}/web-all.log                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n            UTF-8                                                ${log.path}/web-all-%d{yyyy-MM-dd}.%i.log                            100MB                                    15                        ${log.path}/web-trace.log                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n            UTF-8                                                ${log.path}/web-trace-%d{yyyy-MM-dd}.%i.log                            100MB                                    15                        ${log.path}/web-warn.log                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n            UTF-8                                                ${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log                            100MB                                    15                            WARN            ACCEPT            DENY                        ${log.path}/web-error.log                    %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n            UTF-8                                                ${log.path}/web-error-%d{yyyy-MM-dd}.%i.log                            100MB                                    15                            ERROR            ACCEPT            DENY                                                                                        

问题排查解决

问题原因大概猜测是因为配置冲突引起的, 我就去看jar的内容 , 看看是nacos 的那个pom 再用logback , 最终在 nacos-config  -> nacos-client 2.1.0 中发现了Logback 的配置文件 

 罪魁祸首找到了 , 那么久来处理掉这个冲突 , 最直接最简洁的方式就是 , 直接在config 的pom 中屏蔽掉他的nacos-client 

                    com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config                                                com.alibaba.nacos                    nacos-client                                    

事实证明 , 无效,,,,,,, ,    此路不通  ,,,  就换条路  ,   去搜百度,  也是资料少的要死 ,  索性直接去GitHub上找Nacos  仓库 找 issues , 抱着试一试的态度 , 万幸 , 找到了一个2022年6月份提交的一个bug

 这个Issues 说得就是 nacos-logback 和  项目中的logback冲突 ,   并且这位仁兄还放出了报错信息 , 看报错内容是不是眼熟 , 嗯哼 ?  拨云见"日"了 ,  继续往下看 , 可以发现这就是一个 Nacos的Bug , 然后给出的临时解决方案就是 , 吧项目中的Logback 的 scan 属性 , set  = false ; 

 然后再次重启项目  , 豁然 启动了 , 为什么这样就可以了呢 ??

         元素中的 scan 属性可以用来控制 logback 是否自动扫描配置文件的变化并重新加载配置。该属性的默认值是 true,表示 logback 会周期性地检查配置文件的变化,并在检测到变化时重新加载配置文件。

具体来说,scan 属性的原理是通过启动一个单独的线程来监视配置文件的变化,一旦检测到配置文件发生了变化,就会重新读取配置文件并更新 logback 的内部状态。这样可以避免在修改配置文件后需要手动重启应用程序的情况,从而提高开发效率。

需要注意的是,如果您的配置文件较大,或者您的应用程序的日志记录量很大,那么频繁地重新加载配置文件可能会带来一定的性能开销。因此,在生产环境中建议将 scan 属性设置为 false,并在必要时手动重启应用程序以更新配置文件。

至此 , 问题算是临时性解决了 , 但是总让人感觉不满意,  总感觉是治标不治本 ,  nacos 高版本是否会解决这个问题呢  ?? 抱着好奇的态度 , 去 Mvn 中央仓库看看Nacos 的pom 版本 现在到那个版本了. ps: 我现在的项目使用的是 2.2.8  , 截止目前最新的版本是 2022.0.0.0-RC-1 

 从这里看 , client 的版本也更新了 , 

 那么 , 试试呗,  升级项目中管理的  spring-cloud-alibaba-dependencies 版本  ,

        Hoxton.SR1        2022.0.0.0-RC1

果不其然,   出问题了 ,,,,,,真  tm  X蛋  , 最新版本的nacos pom  居然是 jdk 17  ,  我以为我11 都够新的了 , ,,,,,,,,,  搞到这里 , 如果大家不想继续搞了的话,  就用前面的解决办法 ,  把scan 设置为 false , ,,,  什么治标不治本 , 先启动再说 ,,,,爱咋滴咋滴,,,,,,有时间再搞 ,   

挣扎10分钟 , 决定还是不让这篇文章烂尾 ,  决心要处理下 

重新打开 mvn 中央仓库 , 大丈夫能屈能伸 ,  退而求其次 , 选个 使用量多的 , 低一版的 , 2021.1

 好奇看了一眼 , 这个nacos-client到底咋回事 ,  点进去一看,  豁.... 好家活,,,  

 废话少说 , pom 再一次换版本 ,  

        Hoxton.SR1                                                2021.1

完美启动

来源地址:https://blog.csdn.net/qq_42543063/article/details/129876312

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈因为项目中的Logback于Nacos的Logback冲突导致的项目启动失败 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录