带有空contextPath的log4j2查找默认值
尝试使用${web:contextPath}查找创建log4j2配置效果很好,直到我尝试使用空的contextPath 如果查找返回空字符串,是否有方法指定默认值?带有空contextPath的log4j2查找默认值,log4j2,Log4j2,尝试使用${web:contextPath}查找创建log4j2配置效果很好,直到我尝试使用空的contextPath 如果查找返回空字符串,是否有方法指定默认值? 如果contextPath为空,我希望以某种方式指定一个默认值。尝试在配置中将其定义为属性 用于xml配置 <Properties> <Property name="contextPath">default value</Property> </Properties> 默认
如果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。那么通常的默认方法应该可以工作。或者简单地从查找中返回您想要的默认值