問題:?
環(huán)境 :? Nacos 2.2.1? ?,? ?Spring-cloud? ?Hoxton.SR1 ,?com.alibaba.cloud.version? 2.2.8 (留意這個版本)
????????最近新搭建了一次虛擬機, 然后重新部署了Nacos , 同時也在一個新項目里引入了Nacos 的服務(wù)注冊功能 , 以下是服務(wù)Pom版本管理配置
<properties>
<java.version>1.8</java.version>
<file_encoding>UTF-8</file_encoding>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<com.alibaba.cloud.version>2.2.8.RELEASE</com.alibaba.cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.2.8.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${com.alibaba.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后再實際使用模塊pom文件中引入服務(wù)注冊和配置管理?
<dependencies>
<!-- Nacos依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 在沒有引入一下pom時候服務(wù)注冊是正常的 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
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配置的時候服務(wù)是可以正常啟動的 , 然后加了之后 服務(wù)根本就啟動不起來 , 報錯如下?
2023-03-31 10:30:06.710 ERROR 40924 --- [ main]o.s.boot.SpringApplication : 826 : Application run failed
java.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_collision
ERROR 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_collision
ERROR 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_collision
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_collision
ERROR 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_collision
ERROR 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_collision
at 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內(nèi)容入如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<contextName>logback</contextName>
<springProperty scope="context" name="logDir" source="log.dir" defaultValue=""/>
<property name="log.path" value="${logDir}"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint}%clr(%-40.40logger{39}:%4line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 輸出到控制臺-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是為開發(fā)使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 設(shè)置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/web-all.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔 -->
<fileNamePattern>${log.path}/web-all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文檔保留天數(shù)-->
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/web-trace.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔 -->
<fileNamePattern>${log.path}/web-trace-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文檔保留天數(shù)-->
<maxHistory>15</maxHistory>
</rollingPolicy>
</appender>
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/web-warn.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔 -->
<fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文檔保留天數(shù)-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/web-error.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%15.15thread]%-40.40logger{39}:%4line: %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志歸檔 -->
<fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文檔保留天數(shù)-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 忽略Nacos配置中心長輪詢?nèi)罩? -->
<logger name="com.alibaba.nacos.client.config.impl" level="WARN"/>
<!-- Mybatis SQL 輸出 -->
<logger name="org.mybatis" level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_FILE"/>
</logger>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
問題排查解決
問題原因大概猜測是因為配置沖突引起的, 我就去看jar的內(nèi)容 , 看看是nacos 的那個pom 再用logback , 最終在 nacos-config? -> nacos-client 2.1.0 中發(fā)現(xiàn)了Logback 的配置文件?
?罪魁禍首找到了 , 那么久來處理掉這個沖突 , 最直接最簡潔的方式就是 , 直接在config 的pom 中屏蔽掉他的nacos-client?
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
事實證明 , 無效,,,,,,, ,? ? 此路不通? ,,,? 就換條路? ,? ?去搜百度,? 也是資料少的要死 ,? 索性直接去GitHub上找Nacos? 倉庫 找 issues , 抱著試一試的態(tài)度 , 萬幸 , 找到了一個2022年6月份提交的一個bug
?這個Issues 說得就是 nacos-logback 和? 項目中的logback沖突 ,? ?并且這位仁兄還放出了報錯信息 , 看報錯內(nèi)容是不是眼熟 , 嗯哼 ?? 撥云見"日"了 ,? 繼續(xù)往下看 , 可以發(fā)現(xiàn)這就是一個 Nacos的Bug , 然后給出的臨時解決方案就是 , 吧項目中的Logback 的 scan 屬性 , set? = false ;?
?然后再次重啟項目? , 豁然 啟動了 , 為什么這樣就可以了呢 ??
????????<configuration>
元素中的scan
屬性可以用來控制 logback 是否自動掃描配置文件的變化并重新加載配置。該屬性的默認值是true
,表示 logback 會周期性地檢查配置文件的變化,并在檢測到變化時重新加載配置文件。具體來說,
scan
屬性的原理是通過啟動一個單獨的線程來監(jiān)視配置文件的變化,一旦檢測到配置文件發(fā)生了變化,就會重新讀取配置文件并更新 logback 的內(nèi)部狀態(tài)。這樣可以避免在修改配置文件后需要手動重啟應(yīng)用程序的情況,從而提高開發(fā)效率。需要注意的是,如果您的配置文件較大,或者您的應(yīng)用程序的日志記錄量很大,那么頻繁地重新加載配置文件可能會帶來一定的性能開銷。因此,在生產(chǎn)環(huán)境中建議將
scan
屬性設(shè)置為false
,并在必要時手動重啟應(yīng)用程序以更新配置文件。
至此 , 問題算是臨時性解決了 , 但是總讓人感覺不滿意,? 總感覺是治標不治本 ,? nacos 高版本是否會解決這個問題呢? ?? 抱著好奇的態(tài)度 , 去 Mvn 中央倉庫看看Nacos 的pom 版本 現(xiàn)在到那個版本了. ps: 我現(xiàn)在的項目使用的是 2.2.8? , 截止目前最新的版本是 2022.0.0.0-RC-1?
?從這里看 , client 的版本也更新了 ,?
?那么 , 試試唄,? 升級項目中管理的? spring-cloud-alibaba-dependencies 版本? ,
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<!-- <com.alibaba.cloud.version>2.2.8.RELEASE</com.alibaba.cloud.version>-->
<com.alibaba.cloud.version>2022.0.0.0-RC1</com.alibaba.cloud.version>
果不其然,? ?出問題了 ,,,,,,真? tm? X蛋? , 最新版本的nacos pom? 居然是 jdk 17? ,? 我以為我11 都夠新的了 , ,,,,,,,,,? 搞到這里 , 如果大家不想繼續(xù)搞了的話,? 就用前面的解決辦法 ,? 把scan 設(shè)置為 false , ,,,? 什么治標不治本 , 先啟動再說 ,,,,愛咋滴咋滴,,,,,,有時間再搞 ,? ?
掙扎10分鐘 , 決定還是不讓這篇文章爛尾 ,? 決心要處理下?
重新打開 mvn 中央倉庫 , 大丈夫能屈能伸 ,? 退而求其次 , 選個 使用量多的 , 低一版的 , 2021.1
?好奇看了一眼 , 這個nacos-client到底咋回事 ,? 點進去一看,? 豁.... 好家活,,,??
?廢話少說 , pom 再一次換版本 ,??文章來源:http://www.zghlxwxcb.cn/news/detail-456750.html
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<!-- nacos-client 的 logback 會和項目的logback 沖突 -->
<!-- <com.alibaba.cloud.version>2.2.8.RELEASE</com.alibaba.cloud.version> -->
<!-- ncom/alibaba/cloud/nacos/discovery/logging/NacosLoggingListener has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 -->
<!-- 最新包需要jdk17編譯 -->
<!-- <com.alibaba.cloud.version>2022.0.0.0-RC1</com.alibaba.cloud.version> -->
<com.alibaba.cloud.version>2021.1</com.alibaba.cloud.version>
完美啟動文章來源地址http://www.zghlxwxcb.cn/news/detail-456750.html
到了這里,關(guān)于淺談因為項目中的Logback于Nacos的Logback沖突導致的項目啟動失敗 ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CO的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!