解決logback使用${spring.application.name}日志打印路徑的問題
項目場景
前提:
系統(tǒng)使用的logback打印日志
日志文件在服務器目錄為/data/service/logs目錄下
分別有debug.log,info.log和error.log三個
問題描述
今天發(fā)現(xiàn)服務器上debug.log,info.log日志停止了,沒有后續(xù)日志,時間點為下午四點17,發(fā)現(xiàn)這個時間點為最近一次升級的時間,初步判斷是因為升級導致
- 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目錄下,多了一個目錄captcha-service,captcha-service目錄下有debug.log,info.log和error.log三個日志,排查發(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},但是排查項目中application.yml中沒有配置spring.application.name的參數(shù),所以之前打印的日志才在/data/service/logs目錄下。
通過在application.yml添加spring.application.name為test,重新啟動發(fā)現(xiàn)生成了test文件夾 /data/service/logs/test ,那顯然captcha-service也是同理,因為今天升級的時候我替換了一個maven的jar,主項目引用了這個jar,去看了下打這個jar包的項目,果然在application.properties里面發(fā)現(xiàn)了spring.application.name=captcha-service
解決方案
針對需要打包的jar
將application.properties文件刪除
重新打包
打包后重新替換原有的maven中jar
在對主項目重新編譯啟動
發(fā)現(xiàn)在/data/service/logs的日志文件數(shù)據(jù)重新打印,解決完畢!
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring MVC全局異常處理和單元測試_動力節(jié)點Java學院整理
本篇文章主要介紹了Spring MVC全局異常處理和單元測試,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08SpringBoot中使用攔截器攔截跳轉登錄的兩種實現(xiàn)方法
攔截器(Interceptor)是Spring框架提供的一種機制,用于在請求的生命周期中插入自定義邏輯,如身份驗證、日志記錄等,本文將詳細介紹兩種在SpringBoot中使用攔截器來控制用戶登錄并跳轉到指定頁面的方法,需要的朋友可以參考下2024-11-11關于Synchronized和ReentranLock的區(qū)別及說明
文章介紹了Java中的`synchronized`關鍵字和`ReentrantLock`類,兩者都可以用于解決多線程同步問題,但`ReentrantLock`提供了更多的功能和靈活性2024-12-12淺談String類型如何轉換為time類型存進數(shù)據(jù)庫
這篇文章主要介紹了String類型如何轉換為time類型存進數(shù)據(jù)庫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java利用trueLicense實現(xiàn)項目離線證書授權操作步驟
文章介紹了如何使用trueLicense實現(xiàn)離線授權控制,包括生成公私鑰、創(chuàng)建證書校驗模塊、生成證書模塊和測試模塊,通過這種方式,可以控制用戶使用的項目模塊、授權周期、使用的設備和服務器,感興趣的朋友跟隨小編一起看看吧2024-11-11java.imageIo給圖片添加水印的實現(xiàn)代碼
最近項目在做一個商城項目, 項目上的圖片要添加水?、?添加圖片水印;②:添加文字水印;一下提供下個方法,希望大家可以用得著2013-07-07