亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何修改logback.xml配置文件在resource以外的位置

 更新時(shí)間:2021年02月27日 10:37:07   作者:FreeFly輝  
這篇文章主要介紹了如何修改logback.xml配置文件在resource以外的位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

因?yàn)閟pring搭建的web項(xiàng)目打包時(shí)默認(rèn)將resource文件夾下的文件一起打包,但是我們又想在打包后修改某些配置

這里以我遇到的logback.xml配置更改默認(rèn)路徑來(lái)看

根據(jù)LoggerFactory.getLogger的方法找到加載文件的位置,如下

 public URL findURLOfDefaultConfigurationFile(boolean updateStatus) {
 ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this);
 URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);
 if (url != null) {
  return url;
 }
 url = getResource(TEST_AUTOCONFIG_FILE, myClassLoader, updateStatus);
 if (url != null) {
  return url;
 }
 url = getResource(GROOVY_AUTOCONFIG_FILE, myClassLoader, updateStatus);
 if (url != null) {
  return url;
 }
 return getResource(AUTOCONFIG_FILE, myClassLoader, updateStatus);
 }

可以看出是根據(jù)順序依次往下尋找配置文件位置,在該類(lèi)的屬性中定義了對(duì)應(yīng)的變量值如下

public class ContextInitializer {
 final public static String GROOVY_AUTOCONFIG_FILE = "logback.groovy";
 final public static String AUTOCONFIG_FILE = "logback.xml";
 final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml";
 final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";

具體加載順序參照靜態(tài)變量上面代碼塊的查找順序

那么我們想修改配置文件位置,只需找到第一個(gè)加載的方法中是如何加載的,因?yàn)楹竺婕虞d文件的位置都是代碼默認(rèn)寫(xiě)死了的

可以看到上面代碼塊中,最先加載的代碼塊是

 URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);
 if (url != null) {
  return url;
 }

點(diǎn)進(jìn)去之后可以看到

private URL findConfigFileURLFromSystemProperties(ClassLoader classLoader, boolean updateStatus) {
 String logbackConfigFile = OptionHelper.getSystemProperty(CONFIG_FILE_PROPERTY);

這里可以看到OptionHelper.getSystemProperty(CONFIG_FILE_PROPERTY)傳入的是靜態(tài)變量中的

final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";</div>
<div>OptionHelper.getSystemProperty中的內(nèi)容是</div>
 public static String getSystemProperty(String key) {
 try {
  return System.getProperty(key);
 } catch (SecurityException e) {
  return null;
 }
 }

可以看出是從 System.getProperty()中獲取的,而key是靜態(tài)變量。

所以我們只要在系統(tǒng)啟動(dòng)時(shí),設(shè)置一個(gè)System.setProperty()就可以了,如下

這一步設(shè)置配置文件路徑

private static final Logger log;
 static {
 System.setProperty("logback.configurationFile","./logback.xml");
 log = LoggerFactory.getLogger(MonitorApplication.class);
 }

就是根據(jù)代碼里定義的key,傳一個(gè)文件路徑的value到System的Peoperty里

提示:此方式與@Slf4j一起使用時(shí),在設(shè)置 System.setProperty()代碼塊之前就加載的類(lèi)中不適用,因?yàn)榇藭r(shí)還未設(shè)置文件位置,但是靜態(tài)常量就已經(jīng)被加載賦值了,比如下面我在main方法中這么定義,main方法中的日志將失去配置文件效果

private static final Logger log = LoggerFactory.getLogger(MonitorApplication.class);;
 static {
 System.setProperty("logback.configurationFile","./logback.xml");
 }
 public static void main(String[] args) {}

因?yàn)槿绻诙x時(shí)就賦值,那么jvm是先加載 靜態(tài)屬性,然后在執(zhí)行靜態(tài)代碼塊的,所以導(dǎo)致System.setProperty()賦值在 log變量賦值以后執(zhí)行,那么設(shè)置的文件位置也就不生效了

@Slf4j注解也一樣,@Slf4j注解后生成的class是下面這樣的:

public class MonitorApplication {
 private static final Logger log = LoggerFactory.getLogger(MonitorApplication.class);

所以我們可以選擇下面這中jvm啟動(dòng)時(shí)帶的參數(shù)

打包后的控制臺(tái)啟動(dòng)設(shè)置參數(shù)可以百度一下,下面是我打包后控制臺(tái)啟動(dòng)的參數(shù)設(shè)置例子

java -Dlogback.configurationFile=./logback.xml -jar monitor-1.0-SNAPSHOT.jar

補(bǔ)充:springboot打包去除資源文件,啟動(dòng)時(shí)指定配置文件位置,使用log4j2替換默認(rèn)logback

springboot打包時(shí),去掉資源文件

<build>
 <resources>
  <resource>
  <directory>src/main/resources</directory>
  <excludes>
   <exclude>*.properties</exclude>
   <exclude>*.xml</exclude>
  </excludes>
  </resource>
 </resources>
 <plugins>
  <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
  
  <plugin>
  <groupId>org.apache.maven.plugins</groupId> 
  <artifactId>maven-surefire-plugin</artifactId> 
  <configuration> 
   <skipTests>true</skipTests> 
  </configuration>
  </plugin>
 </plugins>
 </build>

但這樣配置后,在eclipse中啟動(dòng)springboot項(xiàng)目,則會(huì)出現(xiàn)讀取不到配置資源的情況,所以在eclipse啟動(dòng)項(xiàng)目時(shí),需要注釋掉如下配置

<resources>
 <resource>
  <directory>src/main/resources</directory>
  <excludes>
   <exclude>*.properties</exclude>
   <exclude>*.xml</exclude>
  </excludes>
 </resource>
</resources> 

如果修改了pom文件之后,程序運(yùn)行異常,如果使用eclipse,則可通過(guò)右鍵Maven -- Update Project更新下maven依賴,再次啟動(dòng)服務(wù)

啟動(dòng)時(shí)指定配置文件位置

項(xiàng)目打成jar包后,運(yùn)行時(shí),可將配置文件放入jar包同級(jí)目錄下或者在同級(jí)的config目錄下(放入classpath下或者classpath下config目錄下也可以,但是打成jar包,就需要一起打包出來(lái))

配置文件加載順序?yàn)椋?/p>

jar包同級(jí)目錄下的config文件夾下配置

jar包同級(jí)目錄下配置

classpath下config目錄下配置

classpath下配置

java -Xms100m -Xmx100m -jar myboot001-0.0.1-SNAPSHOT.jar &

也可指定加載配置文件的地址

java -Xms100m -Xmx100m -jar myboot001-0.0.1-SNAPSHOT.jar --spring.config.location=configs/application.properties --logging.config=./log4j2.xml >> /dev/null 2>&1 &

以DEBUG方式啟動(dòng)

java -Xms100m -Xmx100m -jar myboot001-0.0.1-SNAPSHOT.jar --spring.config.location=configs/application.properties --debug

使用log4j2替換默認(rèn)日志框架logback

添加log4j2日志框架依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

此時(shí)啟動(dòng)服務(wù)時(shí),將會(huì)有如下提示

從日志記錄看,依然使用的為logback日志,網(wǎng)上搜索了一些資料得知,需要排除掉默認(rèn)的日志框架才會(huì)生效

本例使用了兩個(gè)spring-boot-starter-data-redis和spring-boot-starter-jdbc依賴,且它們也都有日志框架的依賴,排除默認(rèn)框架時(shí),只需將寫(xiě)在最前面的starter依賴中添加排除默認(rèn)日志框架的代碼即可

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
 <exclusions>
  <exclusion> 
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
  </exclusion>
 </exclusions>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

或者添加如下依賴處理(位置不限)

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 <exclusions>
  <exclusion>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
  </exclusion>
 </exclusions>
 </dependency>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換

    java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換

    這篇文章主要介紹了java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringMVC中使用bean來(lái)接收f(shuō)orm表單提交的參數(shù)時(shí)的注意點(diǎn)

    SpringMVC中使用bean來(lái)接收f(shuō)orm表單提交的參數(shù)時(shí)的注意點(diǎn)

    本篇文章主要介紹了SpringMVC中使用bean來(lái)接收f(shuō)orm表單提交的參數(shù)時(shí)的注意點(diǎn),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • SpringBoot2 Jpa 批量刪除功能的實(shí)現(xiàn)

    SpringBoot2 Jpa 批量刪除功能的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2 Jpa 批量刪除功能的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 一篇文章帶你入門(mén)java多線程

    一篇文章帶你入門(mén)java多線程

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)之常見(jiàn)排序算法(上)

    Java數(shù)據(jù)結(jié)構(gòu)之常見(jiàn)排序算法(上)

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之常見(jiàn)排序算法,本文章是匯總篇,且對(duì)每個(gè)排序都進(jìn)行了說(shuō)明,可以很好的理清思路,對(duì)排序算法有個(gè)總體的框架,需要的朋友可以參考下
    2023-01-01
  • 簡(jiǎn)單談?wù)凴xJava和多線程并發(fā)

    簡(jiǎn)單談?wù)凴xJava和多線程并發(fā)

    認(rèn)識(shí)RxJava已經(jīng)有一段時(shí)間了,但是一直沒(méi)有機(jī)會(huì)在項(xiàng)目中嘗試,最近在新的項(xiàng)目里引進(jìn)了RxJava寫(xiě)一些事件處理,在review代碼的時(shí)候發(fā)現(xiàn)了一些和多線程并發(fā)相關(guān)的問(wèn)題,所以寫(xiě)了這篇文章,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • JAVA中五個(gè)重定向的方式盤(pán)點(diǎn)

    JAVA中五個(gè)重定向的方式盤(pán)點(diǎn)

    頁(yè)面重定向即頁(yè)面從當(dāng)前請(qǐng)求的頁(yè)面,有條件或者定時(shí)跳轉(zhuǎn)到其他頁(yè)面,下面這篇文章主要給大家介紹了關(guān)于JAVA中五個(gè)重定向的方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • SpringMVC之RequestContextHolder詳細(xì)解析

    SpringMVC之RequestContextHolder詳細(xì)解析

    這篇文章主要介紹了SpringMVC之RequestContextHolder詳細(xì)解析,正常來(lái)說(shuō)在service層是沒(méi)有request的,然而直接從controlller傳過(guò)來(lái)的話解決方法太粗暴,后來(lái)發(fā)現(xiàn)了SpringMVC提供的RequestContextHolder,需要的朋友可以參考下
    2023-11-11
  • Java包含抽象方法的枚舉類(lèi)示例

    Java包含抽象方法的枚舉類(lèi)示例

    這篇文章主要介紹了Java包含抽象方法的枚舉類(lèi),結(jié)合實(shí)例形式分析了Java包含抽象方法的枚舉類(lèi)實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • 詳解Spring Security 簡(jiǎn)單配置

    詳解Spring Security 簡(jiǎn)單配置

    本篇文章主要介紹了詳解Spring Security 簡(jiǎn)單配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論