如何在log4j_config.xml中的appender标签中提供动态文件路径?

时间:2009-01-23 12:30:53

标签: java

您好我正在使用log4j api来记录信息。我使用log4j_conffig.xml文件来创建日志文件。我已经为param标记值中的每个日志文件提供了绝对路径。

例如:

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:/ logFiles /”。实际上,根据我的项目位置,该路径是动态的。那我怎么能给那个

3 个答案:

答案 0 :(得分:1)

任何Java System属性都可以在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命令行上定义这些参数。

答案 1 :(得分:0)

您已使用$ {java.home}或$ {user.home}来定义文件的相对路径。有关更完整的示例,请参阅log4help

答案 2 :(得分:0)

您可以通过从RollingFileAppender扩展并添加可根据项目定义的“prefix”属性来创建自己的appender。 log4j使用的文件名是http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html#setFile(java.lang.String),因此在你的appender类中应该很容易使用它并设置文件的名称。

另一个选项是使用log4j.xml定义和可用的一些属性(任何java系统属性都可以)并将文件名引用为$ {my.project.location} /logs/Preprocessor_Debug.log