我需要创建带有键值对的日志,如下所示。 PatternLayout 是否支持使用 log4j2.xml 对线程中的静态字段(如 log_level、class_name、event_id 等)执行此操作。
日志样本:
2014-06-18 11:57:46,719 log_level="信息"
class_name="com.abc.dgl.App:main(158)" name="应用程序启动事件" event_id="b88f7ea0-4cb1-438f-a728-ac7c2bdac578" app="测试应用程序"严重程度="info"action="已加载 sfor 文件处理" desc="props 已读取并加载" result="success" Reason="abc" transaction_id="b88f7ea0-4cb1-438f-a728-ac7c2bdac578"
是的,这是可能的。
您可以使用地图留言 http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/message/MapMessage.html,这是由map
(or K
) 的转换模式图案布局 http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout:一个示例布局模式是"%-5p [%t]: %m %map%n"
.
记录 MapMessage 如下所示:Map<String,String> myMap = getMyMap(); Logger.debug(new MapMessage(myMap));
另一种方法是使用线程上下文 http://logging.apache.org/log4j/2.x/manual/thread-context.html地图。这是由mdc
(or X
)PatternLayout的转换模式。示例模式:"%-5p [%t]: %m %mdc%n"
。
常见用法是在用户登录时将用户 ID 放入线程上下文映射中,并在该线程发出的所有日志消息中显示该用户 ID,直到用户注销为止。
您还可以仅通过在布局模式中指定键来记录特定键,而不是记录整个地图:例如"%-5p [%t]: %m %mdc{userID}%n"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)