【问题标题】:log4j ConversionPattern timestamp with microsecondslog4j ConversionPattern 时间戳,以微秒为单位
【发布时间】:2012-01-12 16:08:17
【问题描述】:

我想在使用 log4j 生成的日志文件的每个条目的时间戳中添加微秒,可以吗?

我在官方文档中搜索过,但没有提到毫秒以下的单位。

现在我有一个如下的转换模式:

%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n

在日期转换模式(%d)中我想在毫秒值(SSS)之后添加微秒,有没有办法去做吧 ?

【问题讨论】:

  • 为什么在日志消息中需要微秒时间戳?
  • 因为我有一个高度密集的工作线程,每毫秒可以生成超过 10 个日志条目,我想知道它们之间的微秒间隔...
  • @Cœur 投票结束的相反方向可能更好,因为这个问题包含更新的answer。
  • @MarkRotteveel 关闭投票撤回,我将就另一个问题投票,你是对的。

标签: java logging log4j


【解决方案1】:

从 Java 9 和 log4j 2.11.0 开始,即使是纳秒也可以获得时间戳。

以下是允许获取日期时间或微秒或纳秒时间的特殊预定义模式:

  • 模式:%d{ABSOLUTE_MICROS} 输出示例:14:34:02,123456
  • 模式:%d{ABSOLUTE_NANOS} 输出示例:14:34:02,123456789
  • 模式:%d{DEFAULT_MICROS} 输出示例:2012-11-02 14:34:02,123456
  • 模式:%d{DEFAULT_NANOS} 输出示例:2012-11-02 14:34:02,123456789

如果您需要更具体的模式,请使用“nano-of-second”模式字母 n 而不是“fraction-of-second”模式字母S 例如%d{dd MMM yyyy HH:mm:ss,nnnn} to %d{dd MMM yyyy HH:mm:ss,nnnnnnnnn} 将提供02 Nov 2012 14:34:02,1234 to 02 Nov 2012 14:34:02,123456789。

在您的情况下,由于您需要毫秒和微秒,您的模式可能类似于 %d{dd/MM/yyyy HH:mm:ss,nnnnnn}

Log4j 2.11 增加了对时间戳的有限支持,比 在 Java 9 上运行时的毫秒数。

更多详情请参考https://logging.apache.org/log4j/2.x/manual/layouts.html

【讨论】:

    【解决方案2】:

    如果要显示微秒,需要自己添加。这可以通过自定义 Formatter(而不是 PatternFormatter)来完成

    【讨论】:

    • 我会按照您的建议编写自己的 PatternFormatter,这是唯一的解决方案,谢谢。
    • 出于好奇,您从哪里获得微秒时间戳?我发现 log4j 可能需要几个甚至数百个微秒,所以如果我关心微秒,我会使用我自己的亚微秒记录器。
    • 我有一个处理消息队列的工作人员,根据负载,它每毫秒可以处理超过 10 条消息,并且我以跟踪模式记录每条消息。所以在你看来最好不要t 依赖 log4j 吗?你觉得 logback 怎么样?好点吗 ?再次感谢。
    【解决方案3】:

    它基于SimpleDateFormat,不支持亚毫秒格式,因此无法上报微秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-06
      • 2020-04-11
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多