解決logback的日志文件路徑問題
假如使用絕對路徑,沒有任何問題,就是移植性不太好。
假如使用相對路徑,則要註意當前路徑“.”是在哪兒?
一般我們都會在配置文件中加入log文件的存儲目錄,如
本人通過研究測試發現:
1.對於J2SE項目,當前路徑為工程所在目錄
如我的工程為:D:\test
則使用…/logs生成的日志文件位於:D:\logs
2.對於J2EE項目,當前路徑為tomcat\bin所在目錄
如我的tomcat路徑為:D:\tomcat\bin
則使用…/logs生成的日志文件位於:D:\tomcat\logs
補充:logback加載外部配置文件 重置logback配置文件路徑
logback加載外部配置文件 重置logback配置文件路徑
logback作為一種成熟的日志框架,已被廣泛應用在現代各種java項目中。
以javaweb項目為例,使用logback.xml作為logback的配置文件時,在代碼中通常是將該配置文件放在src/main/resource/下,部署時該文件會放在classpath下。
但是,有時出於各種目的,需要將logback的配置文件放在特定的目錄下,此時需要自定義logback配置文件的加載路徑。
logback自動加載配置文件的優先級如下:
1.classpath下的logback-test.xml
2.classpath下的logback.groovy
3.classpath下的logback.xml
4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置實現類
5.logback自帶的默認配置文件BasicConfigurator
當需要將日志配置文件放在其他路徑下時,其實就是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”)
是獲取你程序當前的運行路徑,這裡也可以把這段代碼封裝成一個方法,配置文件的路徑可以以參數的形式傳入,也可以寫死。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Java logback日志的簡單使用
- 使用Logback設置日志級別
- springboot 使用logback啟動報警報錯的解決
- Springboot內外部logback多環境配置詳解
- SpringBoot3集成SLF4J+logback進行日志記錄的實現