2009-01-23 91 views
1

嗨我正在使用log4j api來記錄信息。我已經使用log4j_conffig.xml文件來創建日誌文件。我給出了param標記值中每個日誌文件的絕對路徑。如何在log4j_config.xml中的appender標籤中提供動態文件路徑?

如:

appender name="GPREPROCESSOR_DEBUG" class="org.apache.log4j.DailyRollingFileAppender"><br> 
     param name="DatePattern" value="'_'yyyyMMdd"/><br> 
     param name="File" value="D:/logFiles/GPreprocessor_Debug.log"/><br> 
     layout class="com.dnb.genericpreprocessor.common.log.AppXMLLayout"/><br> 
/appender><br> 

我不希望給 「d:/日誌文件/」 directly.Actually這條道路根據我的項目的位置是動態的。所以我怎麼能給你

回答

0

你有使用$ {java.home}或$ {user.home}來定義文件的相對路徑。有關更完整的示例,請參閱log4help

0

您可以通過從RollingFileAppender擴展並添加可根據您的項目定義的「prefix」屬性來創建自己的appender。 log4j使用的文件名是http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html#setFile(java.lang.String),所以它應該很容易在ur appender類中使用它並設置文件的名稱。

另一種選擇是使用定義的和可用的log4j.xml某些屬性,多數民衆贊成(任何Java系統屬性會這麼做),並引用文件名作爲$ {} my.project.location /logs/Preprocessor_Debug.log

1

任何Java系統屬性都可以在log4j配置文件中使用。例如,你在其啓動的應用程序可以這樣做:

 
String directory = "logfiles"; // relative to "." 
try { 
    path = new File(directory).getCanonicalPath(); 
} catch (IOException e) { 
    // Cannot use log4j yet, so complain to system out 
    System.out.println("Could not get canonical path for " + directory, e); 
} 

System.setProperty("log.home", path); 

// Now that we've configured log.home, start logging 
DOMConfigurator.configureAndWatch("log4j_config.xml"); 

,然後在你的log4j的配置文件中使用此正確,如:

 
<param name="File" value="${log.home}/GPreprocessor_Debug.log"/> 

的這個唯一的缺點是,你必須定義系統屬性,然後再初始化log4j日誌記錄。當然,如果更方便,您也可以通過「-Dlog.home = D:/ logFiles」在Java命令行上定義這些參數。

相關問題