是否有一个命令行工具,将自动漂亮打印json?

时间:2017-03-28 15:15:07

标签: json bash shell command-line terminal

我知道像'jq'这样的工具可以让你在命令中添加一个管道并对其进行格式化,但你不能将它用于从本地服务器显示实时json日志的情况。有没有可以实现这一目标的工具?

1 个答案:

答案 0 :(得分:0)

我假设您使用安装了systemd的默认Linux发行版,并且所有服务都将与systemd通信以生成协议条目。

回到linux那天只创建了日志文件,但是他们变得很大。然后他们添加logrotate以保持更清洁。

最新的Linux发行版使用systemd来存储协议条目,这要好得多。

要阅读协议,您需要先找到您要查找的服务 列出与systemd呼叫相关联的所有服务...

systemctl list-units | grep service

如果你真的不能使用管道,你可以在没有grep的情况下使用它。

无论如何,选择您喜欢的服务并通过journalctl调用其协议。以下是一些例子......

journalctl -u ssh.service -p warning -n 30  # (sudo) last 30 warnings and errors SSH created 
journalctl -u apache2.service -p err --no-pager # (sudo) all Apache entries without using the pager (less)
journalctl -k -p err --since today  # (sudo) kernel error messages of today

向其添加选项-o json-o json-pretty,您将获得所需的输出。您还可以添加选项-F--follow以显示最新的日记帐分录,并在将新条目附加到日记帐后不断打印新条目。这样,您可以使用conky制作很酷的背景。

您还可以通过systemctl ...

获取服务状态
systemctl status apache2.service    # (sudo) status of Apache

通过这种方式你可以打印......

  

来自本地服务器的实时json日志

就像你想要的那样,没有使用jq ......

admin@suse:~$ journalctl -u apache2.service -p warning -n 1 -o json-pretty --no-pager
{
    "__CURSOR" : "s=65cbb17b253f44c0b800cee690cfb9ee;i=187fd;b=d3effa777ddf4ba9b4f82f126be4439e;m=51cb2bb2d53;t=54b7c4c9ffbeb;x=9fd3b1bc1e50a798",
    "__REALTIME_TIMESTAMP" : "1490372117134315",
    "__MONOTONIC_TIMESTAMP" : "5620815834451",
    "_BOOT_ID" : "d3effa777ddf4ba9b4f82f126be4439e",
    "_TRANSPORT" : "syslog",
    "_SYSTEMD_SLICE" : "system.slice",
    "_MACHINE_ID" : "dc3b59f36cc34cfa8873c5b530577a2a",
    "_HOSTNAME" : "suse",
    "SYSLOG_FACILITY" : "1",
    "_UID" : "33",
    "_GID" : "33",
    "PRIORITY" : "4",
    "SYSLOG_IDENTIFIER" : "/usr/lib/cgi-bin/captainlog/search.sh",
    "MESSAGE" : "Request for the specified frontend is not possible. REMOTE_ADDR: xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxx:xxxx",
    "_COMM" : "logger",
    "_CAP_EFFECTIVE" : "0",
    "_SYSTEMD_CGROUP" : "/system.slice/apache2.service",
    "_SYSTEMD_UNIT" : "apache2.service",
    "SYSLOG_PID" : "21314",
    "_PID" : "21314",
    "_SOURCE_REALTIME_TIMESTAMP" : "1490372117133991"
}

Here is a good guide I found on the internet.