通过 tail 格式化和漂亮打​​印日志

Format and pretty print log via tail

我有这个日志文件,我经常检查它,由于它的格式,如果打印得很好,它更容易阅读。我想在尾部这样做。

在文件中记录如下:

2019-07-04T09:53:04-07:00   some.package.placeholder.stderr {"log": "The content", "foo": "bar", "baz": "blah"}
2019-07-04T10:15:37-07:00   some.package.placeholder.stderr {"log": "I'm actually", "foo": "bar", "baz": "blah"}
2019-07-04T10:15:37-07:00   some.package.placeholder.stderr {"log": "Interested on", "foo": "bar", "baz": "blah"}

我想做类似于

的事情
tail -f myLogFile | grep [...?...] | jq '.log'

所以当拖尾时我得到:

The content
I'm actually
Interested on

甚至:

2019-07-04T09:53:04-07:00   The content
2019-07-04T10:15:37-07:00   I'm actually
2019-07-04T10:15:37-07:00   Interested on

使用 GNU grep -o:

$ tail file | grep -o '{[^}]*}' | jq -r '.log'
The content
I'm actually
Interested on

使用任何 awk:

$ tail file | awk 'sub(/.*{/,"{")' | jq -r '.log'
The content
I'm actually
Interested on

$ tail file | awk '{d=} sub(/.*{/,""){[=11=]="{\"date\": \""d"\", " [=11=]} 1' | jq -r '.date + " " + .log'
2019-07-04T09:53:04-07:00 The content
2019-07-04T10:15:37-07:00 I'm actually
2019-07-04T10:15:37-07:00 Interested on

最后一个通过将输入的日期字段合并到 json 中来工作,这样 jq 就可以 select 并将其与日志字段一起打印。

如果日志行以制表符分隔,您可以阅读原始行并在制表符上拆分。然后您可以解析 json 并过滤到您满意的内容,并根据需要重新组合。

$ tail -f myLogFile | jq -Rr 'split("\t") | [.[0], (.[2] | fromjson.log)] | join("\t")'
2019-07-04T09:53:04-07:00   The content
2019-07-04T10:15:37-07:00   I'm actually
2019-07-04T10:15:37-07:00   Interested on

这是我使用的一个东西,可以在管道中使用并与文件 args 一起使用:

cat /usr/local/bin/j2t
#!/bin/bash

function usage {
  cat <<EOF
Usage:
        [=10=] <json filename>
    or
        tail -F <json filename> | [=10=]
EOF
}

if (($# == 0)); then
    {
        sed "s/@\(timestamp\)//" | jq -r '[.timestamp, .pri.facility, .pri.severity, .message] | join("\t")'
    } < /dev/stdin

else
    if [ -r "" ] ; then
        sed "s/@\(timestamp\)//"  | jq -r '[.timestamp, .pri.facility, .pri.severity, .message] | join("\t")'
    else
        help
    fi
fi

例如:(如果您的 daemon.log 是 json)

j2t /var/log/daemon.log
level: 63, builder: awillia2)
2021-08-14T00:00:06.820642+00:00        daemon  INFO     Starting Run Clamscan...
2021-08-14T00:00:06.846405+00:00        daemon  INFO     Started Run Clamscan.

应该重新格式化时间吧,有点长。