java - 如何在 log4j_config.xml 的appender标签中给出动态文件路径?

标签 java

您好,我正在使用 log4j api 来记录信息。我使用 log4j_config.xml 文件来创建日志文件。我已经在参数标记值中给出了每个日志文件的绝对路径。

例如:

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/”。实际上,该路径是根据我的项目位置动态的。那么我该如何给出呢

最佳答案

任何 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 日志记录之前定义系统属性。当然,你也可以在Java命令行中通过“-Dlog.home=D:/logFiles”来定义这些参数,这样更方便。

关于java - 如何在 log4j_config.xml 的appender标签中给出动态文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472715/

相关文章:

java - 在 java 中使用 Bouncy CaSTLe 从 CSR 文件获取公钥

java - 在 CloudBees 上部署 NetBeans JAXWS

java - 制作一串 List<List<String>> 需要很长时间

java - 我需要从 Microsoft Exchange 服务器上托管的电子邮件发送电子邮件

java - 如何使用java播放视频?

java - 没有收到权威服务器的响应

java - Spring Boot 和日志记录

java - 图像 url 将 null 值传递给另一个 Intent

java - 通过资源加载 jdbc 驱动程序 (Tomcat 7)

java - 如何在java中记录HTTP错误