首页 > 解决方案 > 带有自定义参数的 log4j2,例如 logback ClassicConverter

问题描述

我正在登录 log4j2,作为我在 pojo 中传递的参数之一。我想拦截它并从 pojo 创建一个自定义字符串。pojo 是 keyValue 对的集合。我已经使用 ClassicConverter 在 logback 中实现了这一点。我已经调试过,但看起来我无法访问 argArray

LOGGER.info("日志中的自定义数据{}", eventFields);

这在 log4j2 转换器中是否可行,或者我可能需要使用 diff 类型的插件。

有什么想法吗?

标签: log4j2

解决方案


你有几个选择:

  1. 将您的集合包装在 MapMessage 中并记录消息。如果使用 PatternLayout 你可以使用 %K 来选择你想要的。
  2. 与第一项相同,但实现自定义 PatternConverter 以格式化 Map。
  3. 扩展 MapMessage 并覆盖其中一种格式化方法。
  4. 实现一个自定义模式转换器,可以处理您的应用程序正在使用的消息类型(请参阅http://logging.apache.org/log4j/2.x/manual/messages.html)。

从您的描述看来,您正在尝试编写自定义 PatternConverter。我怀疑您遇到的问题是您要查找的对象附加到日志事件中的 Message 对象,而不是日志事件本身。您应该能够通过 Message.getParameters() 方法访问它。


推荐阅读