Log4j2将值附加到模式

问题描述

我有一个拦截器,该拦截器可获取有关已发出请求的一些信息,我想将该信息附加到Log4j2模式中。

例如: 我有一个基本模式:

{"foo": "bar"}

然后在拦截器中找到“ requestParam”:“ word”和“ remoteAddress”:“ 0.0.0.0”

我希望最终结果为{"foo": "bar","requestParam" : "word","remoteAddress" : "0.0.0.0"}

但是下一个拦截的请求可能具有相同的数据,除了另外一个附加字段。

所以看起来像这样{"foo": "bar","remoteAddress" : "0.0.0.0","key": "value"}

我尝试使用ScriptPatternSelector,但它不允许您追加,而只能在不同模式之间进行选择。

我正在尝试在log4j2中实现吗?

解决方法

在拦截器中,使用ThreadContext.put(key,value)添加数据。然后,您可以在图案布局中指定打印所有ThreadContext项目,或者使用%X转换器或MDC查找-$ {ctx:key}指定要打印的项目。然后,您的拦截器应在请求结束时调用ThreadContext.clearMap(),以使数据不会渗入下一个请求。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...