通过 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.
应该重新格式化时间吧,有点长。
我有这个日志文件,我经常检查它,由于它的格式,如果打印得很好,它更容易阅读。我想在尾部这样做。
在文件中记录如下:
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.
应该重新格式化时间吧,有点长。