Apache Log4j2 StrSubstitutor“默认变量”不起作用

问题描述

我正在尝试配置log4j2记录器。它使用Apache StringSubstitutor

我想将认根目录设置为“ $ {sys:catalina.home} / webapps / $ {contextName} / logs /”。如果在logger.properties文件中设置了属性“ userRootpath”,则应用程序应使用它。我将其设置为“ $ {bundle:logger:userRootpath}”。

要实现此目的,我尝试使用描述为here的“:-” 变量认值定界符。 但是,如果我将其设置为:

<Property name="defaultCatalinaRootpath">${sys:catalina.home}/webapps/${contextName}/logs/</Property>
<Property name="logDir">${bundle:logger:userRootpath:-${defaultCatalinaRootpath}}</Property>

尽管已经在logger.propetie s中设置了它,但它总是只花费$ {defaultCatalinaRootpath},而从不考虑$ {bundle:logger:userRootpath}。

如果我这样设置目录...

<Property name="logDir">${bundle:logger:userRootpath}</Property>

...或者这个...

<Property name="logDir">${sys:catalina.home}/webapps/${contextName}/logs/</Property>

...它可以工作,所以情况与损坏的属性初始化无关。

我试图以不同的方式初始化“:-”结构中的属性,但对我没有任何作用。

如何实现所需的行为?

解决方法

经过一些调试后,我认为这是一个针对“:-”结构中的包变量指定的错误,我在此处报告了该错误:https://issues.apache.org/jira/browse/LOG4J2-2913

如果您对如何出行有任何想法,请分享,我将不胜感激。