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

Ada*_*tan 6 sorting logging datetime strptime

日志中的时间戳格式

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

[When] [What]
Run Code Online (Sandbox Code Playgroud)

例如:

[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.
Run Code Online (Sandbox Code Playgroud)

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

  1. 人类可读.我想很容易地了解事件何时发生.
  2. 按字母顺序排序.当我grep从几个文件中发生事件并使用POSIX sort甚至单词/ 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),并且没有明确的日志行事件标准.

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

Ada*_*tan 12

在此输入图像描述

@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)]
Run Code Online (Sandbox Code Playgroud)

特征:

  • 可排序(最重要的日期项目在左侧)
  • 可读
  • 毫不含糊,时区明确说明
  • 通过分隔[,],有用regexing日期远
  • 易于分析
  • 准确:使用纳秒(在某些机器上可能几乎是几毫秒,这已经足够了)

我还创建了一个很好的github项目,可以帮助进行日期格式化 - 随意查看并建议您自己的格式!