如何根据Java系统属性有条件地添加log4j2附加程序? [英] How do I conditionally add log4j2 appender depending on java system property?
问题描述
我正试图弄清如何根据是否给定/设置java系统属性将追加器添加到记录器中.
I'm trying to figure out how I can add an appender to a logger dependent on whether a java system property is given / set.
所以说我有一个像这样的基本配置:
So let's say I have a basic configuration like this:
<Logger name="myLogger" level="info" additivity="false">
<AppenderRef ref="myAppender1" />
<AppenderRef ref="myAppender2" />
</Logger>
因此,现在我想找出一种方法,仅在提供参数-PaddAppender2的情况下才有条件地添加第二个附加程序.像这样:
So now I'd like to figure out a way to conditionally only add the 2nd appender if I provide a parameter -PaddAppender2. Something like this:
<Logger name="myLogger" level="info" additivity="false">
<AppenderRef ref="myAppender1" />
<?if (${sys:enableAppender2:-false) == "true"}>
<AppenderRef ref="myAppender2" />
</?if>
</Logger>
我该怎么做?
例如,我知道我可以像这样对给定属性("logLevel")进行动态调整(如果未提供该属性,则"info"为默认值):
I know I can for example make the level dynamic on a given property ("logLevel") like that (where "info" is the default if the property is not given):
<Logger name="test" level="${sys:logLevel:-info}" additivity="false">
我查看了有关过滤器的文档,我可以t弄清楚.当然,如果过滤器是前往此处的正确方法,那么当然.
I looked at the documentation for filters, and I can't figure it out. That is of course if filters are even the right way to go here.
推荐答案
无需任何脚本的解决方案:
Solution without any scripting:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" strict="true">
<Properties>
<Property name="appenderToUse">stdout_${sys:LOG4J_LAYOUT:-plain}</Property>
</Properties>
<Appenders>
<Appender type="Console" name="stdout_plain">
<Layout type="PatternLayout" pattern="%d [%t] %-5p %c - %m%n"/>
</Appender>
<Appender type="Console" name="stdout_json">
<Layout type="JSONLayout" compact="true" eventEol="true" stacktraceAsString="true" properties="true"/>
</Appender>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="${appenderToUse}"/>
</Root>
</Loggers>
</Configuration>
这篇关于如何根据Java系统属性有条件地添加log4j2附加程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!