如何使用Log4j2使用地图查找?

时间:2013-10-09 16:20:40

标签: java logging configuration log4j log4j2

我一直在查看这三个网站,了解如何使用log4j2创建地图查找(或任何其他查找):

我理解我正在阅读的背后的一般想法,我只是很难将所有的点点滴滴放在一起。

目标

为了能够在log4j2.xml文件中放置某种变量,该文件在配置时或运行时将该变量替换为资源包中的值。这就是我到目前为止所做的:

配置文件

enter image description here

查找类

enter image description here

getValue(key)方法在资源包中查找与该键关联的电子邮件值。@ Plulu名称是“map”,如果我已正确读取,则与.xml文件中的前缀相关。也“地图”。那么,不会将“error.notification.emails”传递给MapPropertiesLookup类中的lookup(String key)方法吗?我需要做些什么才能让它发挥作用?

2 个答案:

答案 0 :(得分:3)

是的,map是您正在创建的查找的名称。由于Log4j已经有一个名为map的Lookup,因此创建另一个会导致问题。

是的,error.notification.emails应作为键值传递给Lookup。假设getValue(key)工作,如果它被命名为其他东西,你的查找可能会有效。

但是,您可能更有意义地提交Jira并要求ResourceBundleLookup,其语法可能类似于:$ {bundle:bundleName:key}。当然,“bundleName:key”将作为键传递给查找,它会将键分成组件部分。

如果您还有其他问题,可以考虑询问Log4j开发人员邮件列表。

答案 1 :(得分:3)

我为下一个版本添加了一个新的查找(无论是beta还是候选版本):

承诺修订版1531064。

如果您从源代码构建Log4J,则可以立即使用它。如果您构建站点,则会记录该格式,其用法如下:

${bundle:BundleName:BundleKey}

例如:

${bundle:com.domain.Messages:MyKey}

java.util.ResourceBundle类将在类路径中查找com / domain / Messages.properties。

我们的JIRA问题:https://issues.apache.org/jira/browse/LOG4J2-420