如何给文件附加目的地环境变量路径在log4j的配置文件(How to give environmen

2019-07-02 14:05发布

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

value=logs/messages.log"

它创建的文件夹命名日志我的家目录中,并写入所有消息记录到该目录中的文件。

我有一个环境变量设置为某个值。 我想该路径下使用该变量的路径和写邮件。 我怎样才能实现呢?

使用这个我试过:

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

但是,这并不工作。 任何人都可以提出这个问题的解决方案?

Answer 1:

当解析它的配置文件,表达式${MY_HOME}将扩大到系统属性命名的值MY_HOME ,而不是系统环境变量 。 还有的两者之间的差异。

要在干净的方式做到这一点,你必须像这样添加到JVM调用行:

-DMY_HOME=$MY_HOME

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



Answer 2:

你可以给它的环境变量。 只是preppend ENV:变量名之前,这样的:

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


Answer 3:

此语法记录只在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



Answer 4:

我得到这个工作。

  1. 在我的log4j.properties。 我指定

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

  1. 在日食 - JVM参数

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



Answer 5:

java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2" ==>在CMD行,如果你有“XML中值=” $ {} LOG_DIR /log/clientProject/project-error.log”



Answer 6:

也许... :

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}


Answer 7:

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");
}


Answer 8:

由于使用的是Unix,你可以使用这样的路径。

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

路径应该开始/



Answer 9:

动态地改变一个变量 ,你可以这样做:

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);


文章来源: How to give environmental variable path for file appender in configuration file in log4j