log4j2 - 带有自定义参数的 log4j2,例如 logback ClassicConverter
问题描述
我正在登录 log4j2,作为我在 pojo 中传递的参数之一。我想拦截它并从 pojo 创建一个自定义字符串。pojo 是 keyValue 对的集合。我已经使用 ClassicConverter 在 logback 中实现了这一点。我已经调试过,但看起来我无法访问 argArray
LOGGER.info("日志中的自定义数据{}", eventFields);
这在 log4j2 转换器中是否可行,或者我可能需要使用 diff 类型的插件。
有什么想法吗?
解决方案
你有几个选择:
- 将您的集合包装在 MapMessage 中并记录消息。如果使用 PatternLayout 你可以使用 %K 来选择你想要的。
- 与第一项相同,但实现自定义 PatternConverter 以格式化 Map。
- 扩展 MapMessage 并覆盖其中一种格式化方法。
- 实现一个自定义模式转换器,可以处理您的应用程序正在使用的消息类型(请参阅http://logging.apache.org/log4j/2.x/manual/messages.html)。
从您的描述看来,您正在尝试编写自定义 PatternConverter。我怀疑您遇到的问题是您要查找的对象附加到日志事件中的 Message 对象,而不是日志事件本身。您应该能够通过 Message.getParameters() 方法访问它。
推荐阅读
- c++ - 如何存储值以供以后使用?
- python - OpenCV 帧到 FFMPEG
- azure - Azure Batch Pool 卡在启动任务上
- autodesk-forge - 如何为模型制作放置工具?
- python - 我使用 for 循环创建了一个函数,用于在字典中显示和添加项目。我的代码看起来不错吗?我应该采取不同的做法吗?
- html - 如何在 View/Scroll 上触发 CSS 动画?
- asp.net-core - API 网关 Ocelot 和 Kubernetes
- xamarin - 如何在 Xamarin 表单中延迟几秒随机图像并显示到 XAML 中?
- php - 如何加入 3 表 eloquent laravel 8
- jestjs - 在 node.js 中模拟缓存块