解決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。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: