我假设您使用安装了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.