如何重新格式化RFC5424日志尾巴的输出以使其更易于阅读?

时间:2018-06-28 15:40:23

标签: regex bash perl logging rfc

记录消息的RFC5424格式是合理的,但难以即时读取。

关于如何使它更易于阅读的技术方面的想法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用JSON模块将其解码为本地Perl结构,并使用Data::Dumper

查看
perl -MJSON -MData::Dumper -0 -ne 'print Dumper decode_json($_)' path/to/log/file

(可选)将Dumper缩进设置为1以更好地查看:$Data::Dumper::Indent = 1

答案 1 :(得分:0)

我只是想把它放在某个地方,以防某天有人发现它的用途。

在adonis.js中工作时,我发现Logger类非常有用,但是其输出很难即时读取。

我做了一些挖掘工作,但找不到合理的解决方案,所以我花了一些力气才能得到此结果:

tail path/to/log/file -f | perl -pe 's/^.*?"level":"([^"]*)".*?"message":"((\\"|[^"])*)".*?"timestamp":"([^"]*)".*?$/\e[0;36m|\e[0m\e[1;30m $1: $4\n\r\e[0m\e[0;36m|\e[0m $2\n\r/'

这将变成RFC5424格式的日志文件条目的典型日志:

enter image description here

对此:

enter image description here

希望这对某人有用!

答案 2 :(得分:0)

logfmt

没有为此的CPAN模块,但是您可以使用以下代码对其进行近似:

journalctl -o json | perl -MJSON -lne'
    my $j = decode_json $_;
    my $out = "";
    for my $k (sort keys %$j) {
        my $v = $j->{$k};
        $v = qq("$v") if $v =~ /\s/;
        $out .= "$k=$v ";
    };
    print $out;
'

使用coloutlnav可以提高可用性。