日志的可排序,可读和标准时间格式

时间:2013-07-23 19:56:02

标签: sorting datetime logging strptime

日志中的时间戳格式

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

[When] [What]

e.g:

[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来自几个文件的事件并使用POSIX sort或甚至word / excel对它们进行排序时,我希望按字母顺序排序遵循按时间顺序排序。例如,[23/Jul/2012:19:35:11 +0000][22/Jul/2013:19:35:11 +0000]不可排序 - 2013年线将出现在2012年之前。
  3. 可以通过所有常用语言轻松解析。如果日志由脚本处理,则应使用标准strptime轻松解析时间戳。
  4. 到目前为止,我发现的唯一标准是ISO_8601,它有许多变体(例如2007-04-05T14:30Z2007-03-01T13:00:00Z),并且没有明确的日志行事件标准。

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

2 个答案:

答案 0 :(得分:10)

enter image description here

@ J.F。塞贝斯蒂安 - 感谢您的评论。

经过一些研究后,我选择了RFC 3339 / ISO 8601 in UTC,例如:

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)]

特点:

  • 可排序(最重要的日期项目在左侧)
  • 可读
  • 明确无误,时区明确说明
  • []分隔,对于重新标记日期非常有用
  • 易于分析
  • 准确:使用纳秒(在某些机器上可能几乎毫秒,这已经足够了)

我还创建了nice github project that helps with date formatting - 随时查看并建议您自己的格式!

答案 1 :(得分: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