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

Java 如何在log4j_config.xml中的appender标记中提供动态文件路径?,java,Java,嗨,我正在使用log4japi来记录信息。我使用log4j_conffig.xml文件创建日志文件。我已经在param标记值中给出了每个日志文件的绝对路径 例如: appender name=“GPREPROCESSOR_DEBUG”class=“org.apache.log4j.DailyRollingFileAppender”> param name=“DatePattern”value=“''yyyyymmdd”/> param name=“File”value=“D:/logFiles/

嗨,我正在使用log4japi来记录信息。我使用log4j_conffig.xml文件创建日志文件。我已经在param标记值中给出了每个日志文件的绝对路径

例如:

appender name=“GPREPROCESSOR_DEBUG”class=“org.apache.log4j.DailyRollingFileAppender”>
param name=“DatePattern”value=“''yyyyymmdd”/>
param name=“File”value=“D:/logFiles/GPreprocessor_Debug.log”/>
layout class=“com.dnb.genericpreprocessor.common.log.AppXMLLayout”/>
/附录>

我不想直接给出“D:/logFiles/”。实际上,该路径是基于我的项目位置的动态路径。那么,我如何给出

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

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

您可以通过从RollingFileAppender扩展并添加可根据项目定义的“prefix”属性来创建自己的appender。log4j使用的文件名是,因此在我们的appender类中使用它并设置文件名应该很容易


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

您可以通过从RollingFileAppender扩展并添加“前缀”来创建自己的appender可以根据项目定义的属性。log4j使用的文件名是,因此在我们的appender类中使用它并设置文件名应该很容易


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

任何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"); String directory=“logfiles”;//相对于“.” 试一试{ path=新文件(目录).getCanonicalPath(); }捕获(IOE异常){ //还不能使用log4j,请向系统输出部门投诉 System.out.println(“无法获取”+目录的规范路径,e); } System.setProperty(“log.home”,路径); //现在我们已经配置了log.home,开始记录日志 configurator.configurandwatch(“log4j_config.xml”); 然后在您的log4j配置文件中正确使用如下内容:

<param name="File" value="${log.home}/GPreprocessor_Debug.log"/>
唯一的缺点是在初始化log4j日志之前必须定义系统属性。当然,如果方便的话,还可以通过“-Dlog.home=D:/logFiles”在Java命令行上定义这些参数。

任何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"); String directory=“logfiles”;//相对于“.” 试一试{ path=新文件(目录).getCanonicalPath(); }捕获(IOE异常){ //还不能使用log4j,请向系统输出部门投诉 System.out.println(“无法获取”+目录的规范路径,e); } System.setProperty(“log.home”,路径); //现在我们已经配置了log.home,开始记录日志 configurator.configurandwatch(“log4j_config.xml”); 然后在您的log4j配置文件中正确使用如下内容:

<param name="File" value="${log.home}/GPreprocessor_Debug.log"/> 唯一的缺点是在初始化log4j日志之前必须定义系统属性。当然,如果方便的话,还可以通过“-Dlog.home=D:/logFiles”在Java命令行上定义这些参数