当前位置: 首页 > 知识库问答 >
问题:

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

蒋岳
2023-03-14

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

  • http://logging.apache.org/log4j/2.x/manual/extending.html#Lookups
  • http://logging.apache.org/log4j/2.x/manual/lookups.html
  • http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution

我理解我正在阅读的内容背后的大意,我只是很难把所有的零碎东西放在一起。

球门

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

配置文件

查找类

getValue(key)方法在资源包中查找与该键关联的电子邮件值。@Plugin名称是“map”,如果我没看错的话,它与. xml文件中也是“map”的前缀相关。那么,“error.notification.emails”不会传递给MapProperty tiesLookup类中的lookup(String key)方法吗?我需要做什么才能让它工作?

共有2个答案

茹轩昂
2023-03-14

我为下一个版本添加了一个新的查找(无论是测试版还是发布版本):

提交版本1531064。

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

${bundle:BundleName:BundleKey}

例如:

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

java.util。ResourceBundle类将查找com/domain/Messages。类路径上的属性。

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

费明诚
2023-03-14

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

是,error.notification。电子邮件应作为键值传递给查找。假设getValue(键)有效,如果它被命名为其他名称,那么您的查找可能会有效。

但是,对您来说,提交Jira并请求ResourceBundleLookup可能更有意义,其中语法可以是:${bundle: bundleName: key}。当然,“bundleName: key”将作为键传递给查找,它会将键拆分为组件部分。

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

 类似资料:
  • 我最近一直在使用Hamcrest库编写一些测试,非常成功,但现在我需要做一些更复杂的事情,并开始看到很多困难。我需要输入并验证地图中项目的属性。我的生产代码如下所示: 我想写一些像下面这样的测试代码,但是它不编译。看起来Hamcrest的hasEntry是类型参数化的,而hasItem和hasProperty只需要Object。 我的IDE(Eclipse)给出了这个错误消息:参数化方法

  • 问题内容: 如何使用NHibernate进行此查询 我正在使用NHibernate3。 我尝试使用新的Linq提供程序来完成此操作,但未成功。只要它产生上面确切的sql查询,我就不在乎它的执行方式。我希望编写一个强类型查询,如果可能的话,不要使用魔术字符串。 我是NHibernate的新手,所以这个问题可能很简单。 这是更多信息 我将Fluent NHibernate与AutoMappings结合

  • 我尝试序列化Jackson属性类型信息,即使我的类型被映射引用。 使用此简单示例: 我得到: 但我想有: 可能吗?怎么做? 我已经尝试使用,但我得到:

  • 如何使用RxJava的Android Room进行单行查询?我可以查询项目列表,没有问题。这里,我想找出是否存在特定的行。根据文档,如果不存在行,我可以返回Single并检查EmptyResultSetException异常。 我可以吃一些类似的东西: 如何使用此呼叫?看起来有一些onError/onSuccess,但在单个上找不到这些方法 任何可行的例子都会很好!

  • 问题内容: 我有一个(实际上,我使用的是更复杂的POJO,但是为了我的问题而简化了它) 好像 : 我如何遍历此地图,打印出密钥,然后打印人名,然后打印人年龄,例如: A是Map < String ,Person> 的键 B是Person.getName()的名称 C是Person.getAge()的年龄 我可以使用.values()从地图中提取所有值,如HashMap文档中所述,但是我不确定如何获

  • 我有以下两种调用集合操作的形式,都返回相同的结果,但我仍然不能完全依赖于方法引用,需要一个lambda。 为此,考虑以下由100个随机数组成的流 1) 以下示例使用纯lambda 2) 以下尝试使用方法引用,但第二个参数仍然需要lambda 在本例中,如何重写java 8中collect方法的第二个参数以使用方法引用而不是lambda?