带有空contextPath的log4j2查找默认值

带有空contextPath的log4j2查找默认值,log4j2,Log4j2,尝试使用${web:contextPath}查找创建log4j2配置效果很好,直到我尝试使用空的contextPath 如果查找返回空字符串,是否有方法指定默认值? 如果contextPath为空,我希望以某种方式指定一个默认值。尝试在配置中将其定义为属性 用于xml配置 <Properties> <Property name="contextPath">default value</Property> </Properties> 默认

尝试使用${web:contextPath}查找创建log4j2配置效果很好,直到我尝试使用空的contextPath

如果查找返回空字符串,是否有方法指定默认值?


如果contextPath为空,我希望以某种方式指定一个默认值。

尝试在配置中将其定义为属性

用于xml配置

<Properties>
   <Property name="contextPath">default value</Property>
</Properties>

默认值

假设web查找过程的工作原理与系统属性查找相同,那么如果web查找失败,它应该返回到属性部分中定义的值。

您可以在配置中定义一个回退值,如下所示:

${web:contextPath:-default-value}

(“默认值”为回退值)。请注意回退前面的连字符。

查看
org.apache.logging.log4j.core.lookup.Interpolator.lookup(LogEvent事件,String var)
,问题是只有当值为null时才会调用回退,但在本例中它只是一个空字符串。web查找似乎返回ctx.getContextPath(),因此,它完全取决于ServletContext如何初始化上下文路径。在其源
this.contextPath=”“
的MockServletContext构造函数中,我假设您拥有的上下文做了类似的事情。是的,对于作为主机的根部署的应用程序,contextPath将是“”。看来我运气不好。不完全是,你应该能够创建自己的属性查找插件。如果检索到的contextPath为“”,只需扩展WebLookup并重写lookup方法即可返回null。那么通常的默认方法应该可以工作。或者简单地从查找中返回您想要的默认值