解決logback使用${spring.application.name}日志打印路徑的問(wèn)題
項(xiàng)目場(chǎng)景
前提:
系統(tǒng)使用的logback打印日志
日志文件在服務(wù)器目錄為/data/service/logs目錄下
分別有debug.log,info.log和error.log三個(gè)
問(wèn)題描述
今天發(fā)現(xiàn)服務(wù)器上debug.log,info.log日志停止了,沒有后續(xù)日志,時(shí)間點(diǎn)為下午四點(diǎn)17,發(fā)現(xiàn)這個(gè)時(shí)間點(diǎn)為最近一次升級(jí)的時(shí)間,初步判斷是因?yàn)樯?jí)導(dǎo)致
- logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="false"> <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/> <springProperty scop="context" name="server.port" source="server.port" defaultValue=""/> <property name="log.path" value="logs/${spring.application.name}"/> <!-- 彩色日志依賴的渲染類 --> <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}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="common-pattern-color" value="[${spring.application.name}:${server.port}:%X{area}:%X{orgId}:%X{userId}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint}:%clr([%5p]){blue} %clr([${PID}]){magenta} %clr([%X{trace}]){yellow} %clr([%t:%r]){orange} %clr([%logger{50}.%M:%L]){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /> <!-- Console log output --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${common-pattern-color}</pattern> </encoder> </appender> <!-- Log file debug output --> <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/info/%d{yyyy-MM, aux}/log_info_%d{yyyy-MM-dd}.log.gz</fileNamePattern> <!-- <maxFileSize>50MB</maxFileSize>--> <maxHistory>180</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>--> <pattern>${common-pattern-color}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 --> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- Log file debug output --> <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/debug/%d{yyyy-MM, aux}/log_debug_%d{yyyy-MM-dd}.log.gz</fileNamePattern> <!-- <maxFileSize>50MB</maxFileSize>--> <maxHistory>180</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>--> <pattern>${common-pattern-color}</pattern> </encoder> </appender> <!-- Log file error output --> <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/%d{yyyy-MM}/log_error_%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>50MB</maxFileSize> <maxHistory>180</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--logstash 日志采集集成--> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5044</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <!--nacos 心跳 INFO 屏蔽--> <logger name="com.alibaba.nacos" level="OFF"> <appender-ref ref="error"/> </logger> <!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 --> <root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="debug"/> <appender-ref ref="error"/> <appender-ref ref="info"/> <appender-ref ref="logstash"/> </root> </configuration>
原因分析
后續(xù)排查發(fā)現(xiàn)在/data/service/logs目錄下,多了一個(gè)目錄captcha-service,captcha-service目錄下有debug.log,info.log和error.log三個(gè)日志,排查發(fā)現(xiàn)是系統(tǒng)打印的日志
日志打印為何從/logs跑到了/captcha-service下?
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="false"> <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/> <springProperty scop="context" name="server.port" source="server.port" defaultValue=""/> <property name="log.path" value="logs/${spring.application.name}"/>
觀察發(fā)現(xiàn),在logback-spring.xml里我定義的log.path為logs/${spring.application.name},但是排查項(xiàng)目中application.yml中沒有配置spring.application.name的參數(shù),所以之前打印的日志才在/data/service/logs目錄下。
通過(guò)在application.yml添加spring.application.name為test,重新啟動(dòng)發(fā)現(xiàn)生成了test文件夾 /data/service/logs/test ,那顯然captcha-service也是同理,因?yàn)榻裉焐?jí)的時(shí)候我替換了一個(gè)maven的jar,主項(xiàng)目引用了這個(gè)jar,去看了下打這個(gè)jar包的項(xiàng)目,果然在application.properties里面發(fā)現(xiàn)了spring.application.name=captcha-service
解決方案
針對(duì)需要打包的jar
將application.properties文件刪除
重新打包
打包后重新替換原有的maven中jar
在對(duì)主項(xiàng)目重新編譯啟動(dòng)
發(fā)現(xiàn)在/data/service/logs的日志文件數(shù)據(jù)重新打印,解決完畢!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java基于logback?MessageConverter實(shí)現(xiàn)日志脫敏方案分析
- idea項(xiàng)目啟動(dòng)報(bào)錯(cuò),日志包沖突slf4j和logback沖突問(wèn)題
- SpringBoot整合日志功能(slf4j+logback)詳解(最新推薦)
- springboot項(xiàng)目配置logback-spring.xml實(shí)現(xiàn)按日期歸檔日志的方法
- SpringBoot3配置Logback日志滾動(dòng)文件的方法
- 如何為?Spring?Boot?項(xiàng)目配置?Logback?日志
- 如何為L(zhǎng)ogback日志添加唯一追蹤ID
相關(guān)文章
Spring MVC全局異常處理和單元測(cè)試_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本篇文章主要介紹了Spring MVC全局異常處理和單元測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08idea 有時(shí)提示找不到類或者符號(hào)的解決
這篇文章主要介紹了idea 有時(shí)提示找不到類或者符號(hào)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09SpringBoot中使用攔截器攔截跳轉(zhuǎn)登錄的兩種實(shí)現(xiàn)方法
攔截器(Interceptor)是Spring框架提供的一種機(jī)制,用于在請(qǐng)求的生命周期中插入自定義邏輯,如身份驗(yàn)證、日志記錄等,本文將詳細(xì)介紹兩種在SpringBoot中使用攔截器來(lái)控制用戶登錄并跳轉(zhuǎn)到指定頁(yè)面的方法,需要的朋友可以參考下2024-11-11JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁(yè)面
這篇文章主要為大家詳細(xì)介紹了JavaFx實(shí)現(xiàn)登錄成功跳轉(zhuǎn)到程序主頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06關(guān)于Synchronized和ReentranLock的區(qū)別及說(shuō)明
文章介紹了Java中的`synchronized`關(guān)鍵字和`ReentrantLock`類,兩者都可以用于解決多線程同步問(wèn)題,但`ReentrantLock`提供了更多的功能和靈活性2024-12-12Maven依賴junit?@Test報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Maven依賴junit?@Test報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03淺談String類型如何轉(zhuǎn)換為time類型存進(jìn)數(shù)據(jù)庫(kù)
這篇文章主要介紹了String類型如何轉(zhuǎn)換為time類型存進(jìn)數(shù)據(jù)庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java利用trueLicense實(shí)現(xiàn)項(xiàng)目離線證書授權(quán)操作步驟
文章介紹了如何使用trueLicense實(shí)現(xiàn)離線授權(quán)控制,包括生成公私鑰、創(chuàng)建證書校驗(yàn)?zāi)K、生成證書模塊和測(cè)試模塊,通過(guò)這種方式,可以控制用戶使用的項(xiàng)目模塊、授權(quán)周期、使用的設(shè)備和服務(wù)器,感興趣的朋友跟隨小編一起看看吧2024-11-11java.imageIo給圖片添加水印的實(shí)現(xiàn)代碼
最近項(xiàng)目在做一個(gè)商城項(xiàng)目, 項(xiàng)目上的圖片要添加水?、?添加圖片水印;②:添加文字水印;一下提供下個(gè)方法,希望大家可以用得著2013-07-07