解決logback的日志文件路徑問題
假如使用絕對路徑,沒有任何問題,就是移植性不太好。
假如使用相對路徑,則要注意當(dāng)前路徑“.”是在哪兒?
一般我們都會在配置文件中加入log文件的存儲目錄,如
本人通過研究測試發(fā)現(xiàn):
1.對于J2SE項目,當(dāng)前路徑為工程所在目錄
如我的工程為:D:\test
則使用…/logs生成的日志文件位于:D:\logs
2.對于J2EE項目,當(dāng)前路徑為tomcat\bin所在目錄
如我的tomcat路徑為:D:\tomcat\bin
則使用…/logs生成的日志文件位于:D:\tomcat\logs
補充:logback加載外部配置文件 重置logback配置文件路徑
logback加載外部配置文件 重置logback配置文件路徑
logback作為一種成熟的日志框架,已被廣泛應(yīng)用在現(xiàn)代各種java項目中。
以javaweb項目為例,使用logback.xml作為logback的配置文件時,在代碼中通常是將該配置文件放在src/main/resource/下,部署時該文件會放在classpath下。
但是,有時出于各種目的,需要將logback的配置文件放在特定的目錄下,此時需要自定義logback配置文件的加載路徑。
logback自動加載配置文件的優(yōu)先級如下:
1.classpath下的logback-test.xml
2.classpath下的logback.groovy
3.classpath下的logback.xml
4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置實現(xiàn)類
5.logback自帶的默認(rèn)配置文件BasicConfigurator
當(dāng)需要將日志配置文件放在其他路徑下時,其實就是logback重新加載配置文件的過程。
參考代碼如下:
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)前的運行路徑,這里也可以把這段代碼封裝成一個方法,配置文件的路徑可以以參數(shù)的形式傳入,也可以寫死。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Spring使用@Autowired注解靜態(tài)實例對象方式
這篇文章主要介紹了Spring使用@Autowired注解靜態(tài)實例對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Java內(nèi)存模型之重排序的相關(guān)知識總結(jié)
重排序是指編譯器和處理器為了優(yōu)化性能而對指令序列進行重新排序的一種手段,文中詳細(xì)介紹了Java重排序的相關(guān)知識,需要的朋友可以參考下2021-06-06Java基礎(chǔ)之三大控制流程結(jié)構(gòu)
這篇文章主要介紹了Java基礎(chǔ)之三大控制流程結(jié)構(gòu),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法
SpringBoot和MybatisPlus的整合可以讓我們更加方便地進行數(shù)據(jù)庫操作,這篇文章主要給大家介紹了關(guān)于SpringBoot3和mybatisplus整合出現(xiàn)的一些問題的相關(guān)資料,需要的朋友可以參考下2024-01-01Spring Data JPA進行數(shù)據(jù)分頁與排序的方法
這篇文章主要介紹了Spring Data JPA進行數(shù)據(jù)分頁與排序的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11