【问题标题】:Possible to change RSYSLOG_FileFormat timestamp output without changing conf file?可以在不更改 conf 文件的情况下更改 RSYSLOG_FileFormat 时间戳输出吗?
【发布时间】:2021-01-06 06:12:32
【问题描述】:

我目前有一个在 rsyslog.conf 中启用了 RSYSLOG_FileFormat 的系统。我不允许更改系统格式,因此我试图找到一种解决方法,使我能够将日志文件的输出(在本例中为 /var/log/messages)查看到所需的时间戳格式以下。原因是我可以更轻松地快速浏览不需要那么精确的日志文件。非常感谢您的建议!

当前输出时间戳示例:

2020-12-17T19:05:34.118891+00:00

期望的输出:

Dec 12 2020 19:05:34 

【问题讨论】:

  • 我认为Dec 17 2020 19:05:34 是正确的?
  • 我们鼓励提问者展示他们迄今为止为自己解决问题所做的尝试。
  • @Cyrus 感谢您的意见。我的 AWK-FU 并没有那么好。我认为我必须合并 awk。但是,我只使用了基本的 awk 命令,例如打印列。
  • 如果dec 也可以使用区域设置的缩写月份名称读取:awk -v FS="[T.]" '{print strftime("%b %m %Y %H:%M:%S", mktime(gensub(/[ :-]/," ","g",$1 " " $2)))}' file

标签: date logging awk timestamp rsyslog


【解决方案1】:

使用awk 和两个数组:

awk 'BEGIN{m[10]="Oct"; m[11]="Nov"; m[12]="Dec"}
     {
       # split first field from current row ("$1")
       # (here: "2020-12-17T19:05:34.118891+00:00") with
       # field separator "T", ".", and "-" in five parts
       # to array "array"
       split($1, array, "[T.-]")

       # rebuild first field from current row with elements of array "array"
       $1=sprintf("%s %s %s %s %s", m[array[2]], array[3], array[1], array[4], $2)

       # output complete current row
       print
     }' /var/log/messages

一行:

awk 'BEGIN{m[10]="Oct"; m[11]="Nov"; m[12]="Dec"} {split($1,array,"[T.-]"); $1=sprintf("%s %s %s %s %s", m[array[2]],array[3],array[1],array[4],$2); print}' /var/log/messages

请自行填写数组m

【讨论】:

  • 你能分解一下吗?我不太确定那个 awk 表达式中发生了什么。理想情况下,我想操纵它以所需格式月-日-年 HH-MM-SS 显示所有输出。我注意到这里专门使用了 12 月和 11 月。这可以在不指定月份的情况下应用于整个日志文件吗?我希望我说得通。
  • @mondragonfx:我已经添加到我的答案中以明确表示。您必须添加剩余的 9 个月。
  • 当您说“请完成数组 m”时。您是指输入其余月份,例如 m[01]="Jan"; m[02]="Feb" 等等。
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多