Springboot logback-spring.xml無(wú)法加載問(wèn)題
Springboot logback-spring.xml無(wú)法加載
現(xiàn)象
SpringBoot項(xiàng)目,啟動(dòng)后,日志文件沒(méi)有出現(xiàn)在logback-spring.xml指定的目錄下
且啟動(dòng)日志開頭如下:
"C:\Program Files\Java\jdk1.8.0_144\bin\java"...
Connected to the target VM, address: '127.0.0.1:52494', transport: 'socket'
18:34:58,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
18:34:58,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
18:34:58,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/D:/mvn_repo/xxx-1.0.2.jar!/logback.xml]
18:34:58,014 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@707194ba - URL [jar:file:/D:/mvn_repo/yyy-1.0.2.jar!/logback.xml] is not of type file
18:34:58,112 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [jar:file:/D:/mvn_repo/zzz-1.0.2.jar!/logback.xml]
logback-spring.xml文件一直未改動(dòng)過(guò),如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <springProperty scope="context" name="logPath" source="log.path"/> <springProperty scope="context" name="logLevel" source="log.level"/> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} %line - %msg%n</pattern> </layout> </appender> <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--滾動(dòng)策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--輸出路徑--> <fileNamePattern>${logPath}/server.%d.log</fileNamePattern> </rollingPolicy> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} %line - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!--滾動(dòng)策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--輸出路徑--> <fileNamePattern>${logPath}/server.%d.error</fileNamePattern> </rollingPolicy> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} %line - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <root level="${logLevel}"> <appender-ref ref="consoleLog"/> <appender-ref ref="fileLog"/> <appender-ref ref="fileErrorLog"/> </root> </Configuration>
原因分析
1.配置文件位置正確
classes/ ├── application.properties ├── com │ └── nero │ └── test │ ├── api │ │ ├── Api.class
2.分析啟動(dòng)日志,分析可能是依賴的jar中有l(wèi)ogback.xml配置,沖突導(dǎo)致的問(wèn)題
解決方案
在application.properties中加入配置:
logging.config=classpath:logback-spring.xml
通過(guò)該配置,強(qiáng)制指定日志的配置文件,問(wèn)題得以解決
springboot logback-spring.xml 配置, 使用不同配置文件中的配置
application.yml
spring: profiles: active: prod # active 哪一個(gè)配置文件
application-dev.yml
logging: file: path: d:/var/log
application-prod.yml
logging: file: path: /var/log/question
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>wechat-service</contextName> <!-- !!!!!!!!!獲取 application-{xxx}.yml 的配置 !!!!!--> <springProperty scope="context" name="log.path" source="logging.file.path"/> <!--<property name="log.path" value="log" />--> <property name="log.maxHistory" value="15" /> <property name="log.colorPattern" value="%d{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n"/> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n" /> <!--輸出到控制臺(tái)--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.colorPattern}</pattern> </encoder> </appender> <!--輸出到文件 info 級(jí)別的 log--> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>${log.maxHistory}</MaxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--輸出到文件 error 級(jí)別的 log--> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="debug"> <appender-ref ref="console" /> </root> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration>
從application-xxx.yml 中拿配置
<springProperty scope="context" name="log.path" source="logging.file.path"/>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入研究spring boot集成kafka之spring-kafka底層原理
這篇文章主要深入研究了spring boot集成kafka如何實(shí)現(xiàn)spring-kafka的底層原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐
為了數(shù)據(jù)安全問(wèn)題,有時(shí)候需要將部分敏感字段加密后再入庫(kù),本文主要介紹了MyBatis實(shí)現(xiàn)字段加解密的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Java實(shí)現(xiàn)茶葉售賣商城系統(tǒng)(java+SSM+JSP+EasyUi+mysql)
這篇文章主要介紹了基于SSM框架實(shí)現(xiàn)的一個(gè)茶葉售賣商城系統(tǒng),應(yīng)用到的技術(shù)有Jsp、SSM 、EasyUi,文中的示例代碼具有一定的學(xué)習(xí)價(jià)值,需要的朋友可以參考一下2021-12-12Spring項(xiàng)目運(yùn)行依賴spring-contex解析
這篇文章主要介紹了Spring項(xiàng)目運(yùn)行依賴spring-contex解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05mybatis-plus雪花算法自動(dòng)生成機(jī)器id原理及源碼
Mybatis-Plus是一個(gè)Mybatis的增強(qiáng)工具,它在Mybatis的基礎(chǔ)上做了增強(qiáng),卻不做改變,Mybatis-Plus是為簡(jiǎn)化開發(fā)、提高開發(fā)效率而生,但它也提供了一些很有意思的插件,比如SQL性能監(jiān)控、樂(lè)觀鎖、執(zhí)行分析等,下面一起看看mybatis-plus雪花算法自動(dòng)生成機(jī)器id原理解析2021-06-06java實(shí)現(xiàn)微信公眾號(hào)消息推送的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用java實(shí)現(xiàn)微信公眾號(hào)消息推送的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟
在現(xiàn)代微服務(wù)開發(fā)中,接口文檔的質(zhì)量直接影響了前后端協(xié)作效率,Swagger 作為一個(gè)主流的接口文檔工具,雖然功能強(qiáng)大,但其默認(rèn)界面和部分功能在實(shí)際使用中略顯不足,而 Knife4j 的出現(xiàn)為我們提供了一種增強(qiáng)的選擇,本篇文章將詳細(xì)介紹如何在項(xiàng)目中集成和使用 Knife4j2024-12-12