问题描述
我有一个拦截器,该拦截器可获取有关已发出请求的一些信息,我想将该信息附加到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(),以使数据不会渗入下一个请求。