解決logback的日志文件路徑問(wèn)題
假如使用絕對(duì)路徑,沒(méi)有任何問(wèn)題,就是移植性不太好。
假如使用相對(duì)路徑,則要注意當(dāng)前路徑“.”是在哪兒?
一般我們都會(huì)在配置文件中加入log文件的存儲(chǔ)目錄,如
本人通過(guò)研究測(cè)試發(fā)現(xiàn):
1.對(duì)于J2SE項(xiàng)目,當(dāng)前路徑為工程所在目錄
如我的工程為:D:\test
則使用…/logs生成的日志文件位于:D:\logs
2.對(duì)于J2EE項(xiàng)目,當(dāng)前路徑為tomcat\bin所在目錄
如我的tomcat路徑為:D:\tomcat\bin
則使用…/logs生成的日志文件位于:D:\tomcat\logs
補(bǔ)充:logback加載外部配置文件 重置logback配置文件路徑
logback加載外部配置文件 重置logback配置文件路徑
logback作為一種成熟的日志框架,已被廣泛應(yīng)用在現(xiàn)代各種java項(xiàng)目中。
以javaweb項(xiàng)目為例,使用logback.xml作為logback的配置文件時(shí),在代碼中通常是將該配置文件放在src/main/resource/下,部署時(shí)該文件會(huì)放在classpath下。
但是,有時(shí)出于各種目的,需要將logback的配置文件放在特定的目錄下,此時(shí)需要自定義logback配置文件的加載路徑。
logback自動(dòng)加載配置文件的優(yōu)先級(jí)如下:
1.classpath下的logback-test.xml
2.classpath下的logback.groovy
3.classpath下的logback.xml
4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置實(shí)現(xiàn)類(lèi)
5.logback自帶的默認(rèn)配置文件BasicConfigurator
當(dāng)需要將日志配置文件放在其他路徑下時(shí),其實(shí)就是logback重新加載配置文件的過(guò)程。
參考代碼如下:
import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.util.StatusPrinter; import java.io.File; public class LogTest { private org.slf4j.Logger logger; private ch.qos.logback.classic.LoggerContext loggerContext; public LogTest() { logger = org.slf4j.LoggerFactory.getLogger(this.class); loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory(); String logbackConfigPath = System.getProperty("user.dir") + "/your_logback_config/logback.xml"; File file = new File(logbackConfigPath); if(!file.exists()) { logger.error("logbackConfigPath file is no exist"); } else { if(!file.isFile()) { logger.error("logbackConfigPath file is not a file"); } else { if(!file.canRead()) { logger.error("logbackConfigPath file can not read"); } else { JoranConfigurator joranConfigurator = new JoranConfigurator(); joranConfigurator.setContext(loggerContext); loggerContext.reset(); try { joranConfigurator.doConfigure(file); } catch (Exception e) { logger.error("logbackConfigPath Load logback config file error. Message: {}",e.getMessage()); } StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext); } } } } }
System.getProperty(“user.dir”)
是獲取你程序當(dāng)前的運(yùn)行路徑,這里也可以把這段代碼封裝成一個(gè)方法,配置文件的路徑可以以參數(shù)的形式傳入,也可以寫(xiě)死。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Spring使用@Autowired注解靜態(tài)實(shí)例對(duì)象方式
這篇文章主要介紹了Spring使用@Autowired注解靜態(tài)實(shí)例對(duì)象方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java內(nèi)存模型之重排序的相關(guān)知識(shí)總結(jié)
重排序是指編譯器和處理器為了優(yōu)化性能而對(duì)指令序列進(jìn)行重新排序的一種手段,文中詳細(xì)介紹了Java重排序的相關(guān)知識(shí),需要的朋友可以參考下2021-06-06學(xué)習(xí)Java之如何對(duì)時(shí)間進(jìn)行格式化
當(dāng)我們?cè)谀J(rèn)情況下構(gòu)造出來(lái)的時(shí)間對(duì)象,它的時(shí)間格式并不適合我們閱讀,并且在開(kāi)發(fā)時(shí),pc端、Android端、iOS端等展示的時(shí)間格式可能也并不完全一樣,本文就從這幾個(gè)問(wèn)題給大家介紹如何對(duì)時(shí)間進(jìn)行格式化,感興趣的同學(xué)可以借鑒一下2023-05-05Java實(shí)現(xiàn)簡(jiǎn)易購(gòu)物系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易購(gòu)物系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Java基礎(chǔ)之三大控制流程結(jié)構(gòu)
這篇文章主要介紹了Java基礎(chǔ)之三大控制流程結(jié)構(gòu),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04SpringBoot3和mybatis-plus整合出現(xiàn)的問(wèn)題解決辦法
SpringBoot和MybatisPlus的整合可以讓我們更加方便地進(jìn)行數(shù)據(jù)庫(kù)操作,這篇文章主要給大家介紹了關(guān)于SpringBoot3和mybatisplus整合出現(xiàn)的一些問(wèn)題的相關(guān)資料,需要的朋友可以參考下2024-01-01Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法
這篇文章主要介紹了Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11