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

Ank*_*hag 42 java log4j environment-variables

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

value=logs/messages.log"
Run Code Online (Sandbox Code Playgroud)

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

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

我试过用这个:

value="${MY_HOME}/logs/message.log"
Run Code Online (Sandbox Code Playgroud)

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

Isa*_*aac 49

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

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

-DMY_HOME=$MY_HOME

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

  • 在*VM Arguments*部分中放置`-DMY_HOME = $ MY_HOME`(不要忘记连字符),而不是*Program arguments*部分. (2认同)

Dan*_*ada 39

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

value="${env:MY_HOME}/logs/message.log"
Run Code Online (Sandbox Code Playgroud)

  • 考虑到您使用的是Log4j2,而不是第一个版本,这是最终的答案。谢谢! (2认同)

Sho*_*ham 11

此语法仅在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>
Run Code Online (Sandbox Code Playgroud)

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


hme*_*ndi 8

我工作了。

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

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

  1. 在日食中-JVM参数

-DLogFilePath = C:\ work \ MyLogFile.log