log4j2日志文件位置,一个用于本地Eclipse Dev,一个在部署期间



我使用log4j2,并在log4j2.xml中配置了一个滚动文件

<RollingFile name="a2.log" append="true"
   fileName="C:/Dev/error_log/local_error_log_app_name.log" 
   filePattern="C:/Dev/error_log/local_error_log_app_name_-%d{MM-dd-yyyy}-%i.txt.gz">

这对于本地Eclipse Development很好,但是当我部署到JBOSS服务器时,我希望路径和文件名适合该文件系统,而不必在部署之前记住编辑log4j2.xml文件。

fileName="/www/logs/error_log/error_log_app_name.log"

我看到了以下帖子

如何在log4j.xml的appender中给出动态文件名

Log4J2 -在运行时分配文件附加程序文件名

和尝试fileName="$${sys:logFilename}"fileName="${sys:logFilename}",但所做的只是将文件${sys放在Jboss bin文件夹' Jboss -as-7.1.1. final bin'

您是否尝试过在配置文件中声明属性?log4j2文档有一个示例:http://logging.apache.org/log4j/2.x/manual/configuration.html PropertySubstitution

如果这不起作用,请在log4j2问题跟踪器中提出一个票:https://issues.apache.org/jira/browse/LOG4J2

在log4j2.xml中声明属性时,使用双美元符号$$

<Properties>
    <Property name="filenameVariable">$${sys:errorLogFileName}</Property>
    <Property name="filePatternVariable">$${sys:errorLogFilePattern}</Property>
</Properties>

和引用使用单美元符号$

<RollingFile name="a2.log" append="true"
    fileName="${filename}" 
filePattern="${filePattern}">

但是,不一定要使用属性。直接引用system属性,还是用一个美元符号

<RollingFile name="a2.log" append="true"
    fileName="${sys:errorLogFileName}" 
filePattern="${sys:errorLogFilePattern}">

对于我实际问题的答案,如何根据我是在Eclipse本地运行还是部署到我们的服务器来动态指定日志文件,我使用

@Singleton
@Startup
public class StartupBean {
@PostConstruct
private void startup() {
       if (File("C:/").exists()) {
         System.setProperty("errorLogFileName", "C:/path/to/error_log.txt");
         System.setProperty("errorLogFilePattern", "C:/path/to/error_log-%d{MM-dd-yyyy}-%i.txt.gz");
       } else {
         System.setProperty("errorLogFileName", "/unix/path/to/error_log.txt");
         System.setProperty("errorLogFilePattern", "/unix/path/to/error_log-%d{MM-dd-yyyy}-%i.txt.gz");
      }
}
}

重要!如果没有系统属性设置System.setProperty("whatever"),您的log4j2.xml中的查找将失败,相反,log4j将写入一个名为您查找的第一部分的文件,即${sys

相关内容

  • 没有找到相关文章

最新更新