如何在log4j中为配置文件中的文件appender提供环境变量路径

时间:2012-10-25 09:56:07

标签: java log4j environment-variables

我有一个log4j.xml配置文件。和RollingFileAppender我需要提供存储日志的文件路径。问题是我的代码将作为可运行的jar部署在Unix机器上。所以,如果我传递这样的参数:

value=logs/messages.log"

它在我的HOME目录中创建名为logs的文件夹,并将所有消息写入此目录中的文件。

我将环境变量设置为某个值。我想使用该变量的路径并在该路径下写入消息。我怎样才能实现它?

我曾尝试过这个:

value="${MY_HOME}/logs/message.log"

但这不起作用。有谁能建议解决这个问题?

9 个答案:

答案 0 :(得分:48)

解析其配置文件时,表达式${MY_HOME}将扩展为名为MY_HOME系统属性的值,而不是系统环境变量。这两者之间存在差异。

要以干净的方式实现这一点,您必须向JVM调用行添加类似的内容:

-DMY_HOME=$MY_HOME

这将定义Java系统属性MY_HOME以包含环境变量MY_HOME的值。

答案 1 :(得分:34)

你可以给它环境变量。只需在变量名称前加上env:就像这样:

value="${env:MY_HOME}/logs/message.log"

答案 2 :(得分:8)

此语法仅在log4j 2.X中记录,因此请确保使用的是正确的版本。

    <Appenders>
    <File name="file" fileName="${env:LOG_PATH}">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
        </PatternLayout>
    </File>
</Appenders>

http://logging.apache.org/log4j/2.x/manual/lookups.html#EnvironmentLookup

答案 3 :(得分:5)

我得到了这个工作。

  1. 在我的log4j.properties中。我指定了
  2.   

    log4j.appender.file.File = $ {LOGFILEPATH}

    1. 在eclipse中 - JVM参数
    2.   

      -DLogFilePath = C:\工作\ MyLogFile.log

答案 4 :(得分:2)

java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2" ==&gt;如果在xml中有“value =”$ {LOG_DIR} /log/clientProject/project-error.log“,请在cmd行中

答案 5 :(得分:0)

也许......:

datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
layout=%d{${datestamp}} ms=%-4r [%t] %-5p %l %n%m %n%n

# infoFile 
log4j.appender.infoFile=org.apache.log4j.RollingFileAppender
log4j.appender.infoFile.File=${MY_HOME}/logs/message.log
log4j.appender.infoFile.layout=org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern=${layout}

答案 6 :(得分:0)

Log4j条目

#-要记录的文件和记录格式

log4j.appender.file.File = $ {LOG_PATH} /mylogfile.log

Java program
String log4jConfPath        = "path/log4j.properties";
File log4jFile              = new File(log4jConfPath);
if (log4jFile.exists()) {
    System.setProperty("LOG_PATH", "c:/temp/");
    PropertyConfigurator.configure(log4jFile.getAbsolutePath());
    logger.trace("test123");
}

答案 7 :(得分:-2)

由于您使用的是unix,因此可以使用这样的路径。

  /home/Production/modulename/logs/message.log

路径应以/

开头

答案 8 :(得分:-2)

动态更改变量,您可以执行以下操作:

String value = System.getenv("MY_HOME");
Properties prop = new Properties("log4j.properties"); 
prop.put("MY_HOME", value); // overwrite with value from environment
PropertyConfigurator.configure(prop);