亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringBoot之logback-spring.xml不生效的解決方法

2024-07-13 10:16:24
字體:
來源:轉載
供稿:網友

一、前言

做新應用就是這樣,會遇到各種問題,昨天剛解決了加載某一個類時候拋出了 class is not visible from class loader 的問題,今天就有遇到了日志文件找不到的問題,還是和二方庫有關的,下面就一一道來。

二、問題產生

正常情況下在  src/main/resources 目錄放下  logback-spring.xml 的配置文件(使用logback日志系統),如下圖

Spring,Boot,logback-spring.xml,logback,spring.xml

application.properties里面設置  spring.application.name=spring-boot-demo-application

引入了一個二方包,二方包里面有 logback.xml

按照上面配置,運行后正常情況下我們希望在 user.home/spring-boot-demo-application/logs 目錄應該有 applicaiton.log 日志文件,然而并沒有,連 spring-boot-demo-application 這個文件夾都沒有生成。

三、問題分析

那么我們就去看看日志系統是如何查找并解析日志配置文件的,SpringBoot中是使用LoggingApplicationListener這個類來進行日志系統的初始化的。LoggingApplicationListener實現了ApplicationListener接口,那么我們通過時序圖看LoggingApplicationListener的onApplicationEvent方法做了啥:

Spring,Boot,logback-spring.xml,logback,spring.xml

代碼(8)查找標準日志配置文件,什么是標準那,那么就看代碼(9)的代碼:

protected String[] getStandardConfigLocations() {  return new String[] { "logback-test.groovy", "logback-test.xml", "logback.groovy",    "logback.xml" }; }

像 "logback-test.groovy", "logback-test.xml", "logback.groovy","logback.xml" 這些是標準的。

那么具體怎么查找那,要看代碼(10):

private String findConfig(String[] locations) {  for (String location : locations) {   ClassPathResource resource = new ClassPathResource(location,     this.classLoader);   if (resource.exists()) {    return "classpath:" + location;   }  }  return null; }

可知使用ClassPathResource類去查找,下面看ClassPathResource的exists方法:

public boolean exists() {  return (resolveURL() != null); }  protected URL resolveURL() {  if (this.clazz != null) {   return this.clazz.getResource(this.path);  }  else if (this.classLoader != null) {   return this.classLoader.getResource(this.path);  }  else {   return ClassLoader.getSystemResource(this.path);  } }

可知是使用 this.classLoader.getResource(this.path); 去查找這里classLoader為AppClassloader。

如果代碼(8)沒有查找到配置,則執行點(12),代碼12邏輯和代碼(8)類似只是查找文件名字不一樣,下面看下:

protected String[] getSpringConfigLocations() {  String[] locations = getStandardConfigLocations();  for (int i = 0; i < locations.length; i++) {   String extension = StringUtils.getFilenameExtension(locations[i]);   locations[i] = locations[i].substring(0,     locations[i].length() - extension.length() - 1) + "-spring."     + extension;  }  return locations; }

可知是在getStandardConfigLocations的文件名上拼接spring,拼接后的文件名為:

“` “logback-test-spring.groovy”, “logback-test-spring.xml”, “logback-spring.groovy”,”logback-spring.xml” “

綜上所述SpringBoot首先去查找標準的日志配置文件,如果找不到在去找拼接Spring的配置的文件。

那么上面我們說了應用中是引入了一個含有logback.xml的jar包,而這個jar包也是使用appclassloader加載的,所以在執行步驟(8)的時候找到了jar包里面的logback.xml,所以就不會再去執行步驟(12)來找我們自定義的logback-spring.xml了。

四、問題解決

方案一,修改我們的配置文件為logback.xml,這樣在步驟(8)的時候會首先查找logback.xml,應該是可以找到的。

方案二、避免二方包里面含有logback.xml,這種情況下,無論我們自己的配置是logback-spring.xml還是logback.xml都不會有問題。

五、總結

日常開發中二方包里面不要帶有日志配置文件,二方庫中使用日志一般都是使用代碼創建的方式。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美有码在线| 国产欧洲精品视频| 国产欧美在线播放| 欧美日韩xxxxx| 亚洲无线码在线一区观看| 国精产品一区一区三区有限在线| 国产精品一区二区三区久久| 亚洲一品av免费观看| 成人www视频在线观看| 美女视频黄免费的亚洲男人天堂| 欧美日韩成人在线观看| 国产欧美亚洲精品| 亚洲美女免费精品视频在线观看| 亚洲免费精彩视频| 亚洲精品视频播放| 成人两性免费视频| 精品国产91乱高清在线观看| 国产精品福利网站| 一个人www欧美| 国产suv精品一区二区| 亚洲欧美日韩在线一区| 91精品国产综合久久久久久久久| 狠狠操狠狠色综合网| 精品呦交小u女在线| 国产日韩av在线播放| 久久噜噜噜精品国产亚洲综合| 日韩免费在线观看视频| 91精品在线一区| 国产精品久久久av久久久| 国产亚洲欧美日韩精品| 亚洲天堂av图片| 日本精品视频在线播放| 久久99久久亚洲国产| 日本人成精品视频在线| 国产aⅴ夜夜欢一区二区三区| 精品女厕一区二区三区| 北条麻妃久久精品| 亚洲资源在线看| 国产偷亚洲偷欧美偷精品| 国产精品aaa| 欧美理论电影网| 国内精品久久久久久久久| 亚洲网址你懂得| 97av在线视频免费播放| 中文字幕亚洲综合| 国产精国产精品| 日韩电影第一页| 亚洲一区二区三区四区在线播放| 国产精自产拍久久久久久| 黑丝美女久久久| 国产精品免费一区二区三区都可以| 久久99青青精品免费观看| 久久久久久久成人| 亚洲人午夜精品免费| 久久精品成人欧美大片| 成人免费淫片aa视频免费| 国产免费一区二区三区在线观看| 日韩精品极品毛片系列视频| 欧美肥老妇视频| 国产精品爽爽ⅴa在线观看| 中文字幕日韩av电影| 国产精品96久久久久久又黄又硬| 欧美高清视频一区二区| 最近2019中文字幕大全第二页| 国产精品吴梦梦| 国产欧亚日韩视频| 在线日韩精品视频| 欧美激情第6页| 国产精品久久久久久久久久尿| 精品国产一区二区在线| 国产成人一区二区三区| 久久久久久久久电影| 国产精品免费网站| 欧美日韩高清在线观看| 国产激情久久久| 久久久成人av| 亚洲一区二区少妇| 亚洲精品福利在线观看| 久久99精品视频一区97| 欧美性受xxxx白人性爽| 国产精品高潮在线| 亚洲区bt下载| 国产亚洲精品va在线观看| 国产精品亚洲一区二区三区| 欧美日韩国产色视频| 中文字幕亚洲无线码a| 欧美视频免费在线| 国产精品高潮呻吟视频| 69久久夜色精品国产69乱青草| 在线观看精品自拍私拍| 亚洲欧美激情在线视频| 午夜精品久久久久久久男人的天堂| 久久久久久久久久久网站| 亚洲自拍偷拍福利| 热久久美女精品天天吊色| 亚洲最大av在线| 亚洲网站在线播放| 久久亚洲精品中文字幕冲田杏梨| 国产美女搞久久| 欧美亚洲在线视频| 欧美成人一区二区三区电影| 成人黄色免费看| 久久精品99久久久久久久久| 日韩午夜在线视频| www.xxxx欧美| 2019国产精品自在线拍国产不卡| 国产在线不卡精品| 亚洲欧美日韩精品久久奇米色影视| 最近2019年日本中文免费字幕| 亚洲人成人99网站| 亚洲男女性事视频| 欧美日韩国产成人在线观看| 国内精品中文字幕| 久久久久久久久亚洲| 亚洲精品一区二区在线| 亚洲欧美综合精品久久成人| 一区二区三区视频观看| 欧美国产亚洲视频| 日韩欧美在线字幕| 亚洲国产精品电影在线观看| 亚洲аv电影天堂网| 精品国产区一区二区三区在线观看| 久热国产精品视频| 成人黄色中文字幕| 中文字幕在线成人| 亚洲码在线观看| 国产欧美久久久久久| 日韩一二三在线视频播| 亚洲人成网站999久久久综合| 91手机视频在线观看| 国产欧美精品在线| 成人免费视频网址| 亚洲少妇中文在线| 欧洲亚洲女同hd| 国产日韩精品在线观看| 国产精品免费一区二区三区都可以| 热久久美女精品天天吊色| 精品国产一区久久久| 一区二区三区日韩在线| 久久国产精品久久久| 亚洲色图综合网| 九九热这里只有精品6| 91国内产香蕉| 成人美女av在线直播| 亚洲精品之草原avav久久| 国产精品久久久久久久天堂| 亚洲精品国产精品自产a区红杏吧| 欧美亚洲成人精品| 久久精品99无色码中文字幕| 久久久av一区| 日韩欧美999| 国产免费一区二区三区香蕉精| 亚洲美女性生活视频| 亚洲人成网站色ww在线| 中文字幕亚洲欧美日韩2019| 国产丝袜精品第一页| 成人黄色中文字幕| 亚洲国产欧美一区二区三区久久| 国产成人精彩在线视频九色| 欧美视频在线观看 亚洲欧| 亚洲免费视频网站| 久久在线精品视频| 在线观看免费高清视频97| 日韩欧美在线免费|