log4j2配置中的用户JVM参数

14

我在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>

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

我希望做的是将这个参数传递给JVM。

-Dapp_home=/home/admin/server

这份文档非常直观。我理解的是它应该像这样工作:

<RollingFile name="RollingFile" fileName="${jvmrunargs:app_home}/logs/app.log"

但是它并没有。我通过使用绝对路径来验证它通常工作。

在另一个我使用log4j(1.x)的应用程序中,它可以像这样工作:

log4j.appender.file.File=${app_home}/logs/app.log
1个回答

29

请查看文档的系统属性查找部分。如果您使用-D这样的系统属性定义一个变量:

-Dapp_home=/home/admin/server
${sys:app_home}

在你的Log4j 2配置中进行访问。


2
你的回答写得更好,但内容/答案是相同的。我会删除我的回答。有一个编辑按钮,使用它来修改,而不是发布重复的内容。 - alan7678
我从未使用编辑按钮来进行除代码格式化之外的任何操作。这感觉就像是篡改别人的财产。但我猜这就是Stackoverflow应该运作的方式。我会记住的,谢谢你指出来! - hzpz
同样的答案,同样的结果!它有效! :) 谢谢你们两个! - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接