首页 > 解决方案 > Log4j2 PatternLayout 将地图值格式化为日期

问题描述

使用 log4j2 我正在使用 MapMessage。在地图中,我有一个以日期为值的键。当使用 PatternLayout 模式时,有没有办法以某种格式显示这个日期,就像 LogEvent date 一样?

例如,有没有一种方法可以将“myDate”的格式设置为 %d: 所用的格式 <PatternLayout pattern="%d{MM-dd-yyyy HH:mm:ss,SSS} [%t] ... %map{myDate} %n"/>

谢谢

标签: javalog4j2

解决方案


开箱即用无法提供格式信息。基本上你有几个选择:

  1. 扩展 MapMessage 以根据需要自定义日期字段的格式。
  2. 创建一个自定义 PatternConverter,您可以在其中编写类似 %myDate{"MM-dd-yy HH:mm:ss,SSS", $${map:myDate}} 的代码
  3. 为LOG4J2-2841提供拉取请求以增强 PatternConverter 以访问具有日期值的第二个参数。这将允许类似 %myDate{"MM-dd-yy HH:mm:ss,SSS", $${map:myDate}}

如果您要实施第 2 项,则最好执行第 3 项,因为工作几乎相同。


推荐阅读