英文:
Log4j2 appending values to a pattern
问题
我有一个拦截器,可以获取有关已进行的请求的一些信息,我想将该信息附加到Log4j2模式中。
例如:
我有一个基本模式:
{ "foo" : "bar" }
然后在拦截器中,我找到了 "requestParam" : "word" 和 "remoteAddress" : "0.0.0.0"。
我希望最终的结果是 { "foo" : "bar", "requestParam" : "word", "remoteAddress" : "0.0.0.0" }
。
然而,下一个被拦截的请求可能具有相同的数据,除了多了一个附加字段。
因此,它可能看起来像这样 { "foo" : "bar", "requestParam" : "word", "remoteAddress" : "0.0.0.0", "key" : "value" }
。
我已经尝试使用 ScriptPatternSelector,但它不允许您附加,只能在不同的模式之间进行选择。
我所尝试做的事情在log4j2中是否可行?
英文:
I have a interceptor that gets some information about a request, that has been made, and I would like to append that information to a Log4j2 pattern.
For example:
I have a base pattern of :
{"foo": "bar"}
Then in the interceptor I find "requestParam" : "word" and "remoteAddress" : "0.0.0.0"
I like the end result to be {"foo": "bar", "requestParam" : "word", "remoteAddress" : "0.0.0.0"}
However next intercepted request might have the same data except for one more additional field.
So it would look something like this {"foo": "bar", "requestParam" : "word", "remoteAddress" : "0.0.0.0", "key": "value"}
I have tried to use ScriptPatternSelector but it does not let you append but just select between different patterns.
Is what I am trying to do even achievable in log4j2?
答案1
得分: 1
在你的拦截器中,使用ThreadContext.put(key, value)添加你的数据。在你的模式布局中,你可以选择打印所有ThreadContext项目,或者使用%X转换器或MDC查找(${ctx:key})来指定要打印的项目。然后,你的拦截器应该在请求结束时调用ThreadContext.clearMap(),以便数据不会泄漏到下一个请求中。
英文:
In your interceptor add your data using ThreadContext.put(key, value). In your pattern layout you can then either specify to print all ThreadContext items or specify the items you want printed using either the %X converter or the MDC Lookup - ${ctx:key}. Your interceptor should then call ThreadContext.clearMap() at the end of the request so the data does not bleed into the next request.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论