log4j2配置中的用户JVM参数

Chr*_*ris 11 java config jvm-arguments log4j2

我在log4j2.xml中定义了RollingFile Appender.

<RollingFile name="RollingFile" fileName="/logs/app.log"
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} - %-5p - %m - [%l]%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
</RollingFile>
Run Code Online (Sandbox Code Playgroud)

我想要做的是在启动时将此参数传递给JVM:

-Dapp_home=/home/admin/server
Run Code Online (Sandbox Code Playgroud)

文件是非常直接的.根据我的理解,它应该像这样工作:

<RollingFile name="RollingFile" fileName="${jvmrunargs:app_home}/logs/app.log"
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.我通过使用绝对路径验证了它的工作原理.

在我使用log4j(1.x)的其他应用程序中,它的工作方式如下:

log4j.appender.file.File=${app_home}/logs/app.log
Run Code Online (Sandbox Code Playgroud)

hzp*_*zpz 22

请查看文档的" 系统属性查找"部分.如果使用-D如下方法将变量定义为系统属性:

-Dapp_home=/home/admin/server
Run Code Online (Sandbox Code Playgroud)

使用

${sys:app_home}
Run Code Online (Sandbox Code Playgroud)

在您的Log4j 2配置中访问它.

  • 你的答案写得更好,但内容/答案是一样的。我会删除我的。有一个编辑按钮是有原因的,使用它而不是发布重复的内容。 (2认同)