10

日志中的时间戳格式

大多数日志行包含时间戳和事件描述:

[When] [What]

例如:

[23/Jul/2013:19:35:11 +0000] Processing started.
[23/Jul/2013:19:36:11 +0000] Processed 1000 items.
[23/Jul/2013:19:37:11 +0000] Processing finished successfully.

我正在尝试为我的日志行查找标准时间戳。我的标准是:

  1. 人类可读。我想轻松了解事件何时发生。
  2. 按字母排序。当我grep从几个文件中事件并使用 POSIXsort甚至 word/excel 对它们进行排序时,我希望字母排序遵循时间排序。例如,[23/Jul/2012:19:35:11 +0000]并且[22/Jul/2013:19:35:11 +0000]不可排序 - 2013 行将出现在 2012 行之前。
  3. 易于被所有常用语言解析。如果日志由脚本处理,则应该使用标准strptime轻松解析时间戳。

到目前为止,我发现的唯一标准是ISO_8601,它有许多变体(例如2007-04-05T14:30Z2007-03-01T13:00:00Z),并且缺乏日志行事件的明确标准。

您能为日志行推荐一种标准时间戳格式吗?

4

2 回答 2

17

在此处输入图像描述

@JF Sebestian - 感谢您的评论。

经过一番研究,我在 UTC 中选择了 RFC 3339 / ISO 8601,例如:

date -u "+[%Y-%m-%d %H:%M:%S%z (%Z)]"       # Space separated with tz abbreviation
[2013-07-31 23:56:34+0000 (UTC)]                   

date -u "+[%Y-%m-%d %H:%M:%S.%N %z (%Z)]"  # Space separated with nanoseconds and tz abbreviation
[2013-07-31 23:56:34.812572000 +0000 (UTC)]

特征:

  • 可排序(最重要的日期项目在左侧)
  • 可读
  • 明确的时区说明
  • [由,分隔],用于正则表达式日期
  • 易于解析
  • 准确:使用纳秒(在某些机器上可能几乎是毫秒,这已经足够好了)

我还创建了一个很好的 github 项目,它有助于日期格式- 请随意查看并建议您自己的格式!

于 2013-08-01T00:03:48.403 回答
2

unix date 命令有这样一个选项。利用

date -Iseconds

或者

date -Ins

手册页说:

   -I[FMT], --iso-8601[=FMT]
          output  date/time  in  ISO  8601  format.   FMT='date' for date only (the default),
          'hours', 'minutes', 'seconds', or 'ns' for date and time to  the  indicated  preci‐
          sion.  Example: 2006-08-14T02:34:56-0600
于 2017-04-10T13:24:26.273 回答