gpt4 book ai didi

logging - Systemd 服务和结构化日志记录

转载 作者:行者123 更新时间:2023-12-01 10:19:20 25 4
gpt4 key购买 nike

我有一个类型为 simple 的 systemd 服务.

我希望我的服务记录键值对。

到目前为止,我的简单服务只是以自定义键值语法将它的日志打印到标准输出。

我想避免我的自定义键值语法,它使用官方方式进行结构化日志记录。

有没有办法在 systemd 中使用结构化日志?

例如,我的服务将其写入标准输出:

{"key1": "value1", "key2": 1234}

systemd 可以将字符串读取为 json 会很棒。

最佳答案

您可以将结构化数据记录到 systemd然后按原样或以 json 格式查看

假设我们以 json 格式记录键值对

systemd-cat -t "struct_logs" echo '{"key1": "value1", "key2": 1234}'

然后我们按原样阅读它们
sudo journalctl -t 'struct_logs' --lines 1 --no-pager

Apr 30 21:46:14 linux-ar struct_logs[17455]: {"key1": "value1", "key2": 1234}

或者json格式
sudo journalctl -t 'struct_logs' --lines 1 --no-pager -o json-pretty
{
"__CURSOR" : "s=b6d07ffffffffff2787cea140a0db88a5;i=db8;b=c9b2132ffffffffe5807625fe;m=9fa5b3f81;t=58fffffff87eab;x=6402818ea7e32a5b",
"__REALTIME_TIMESTAMP" : "1556671574343339",
"__MONOTONIC_TIMESTAMP" : "42854989697",
"_BOOT_ID" : "fffffffffffff24ec7a237b5e5807625fe",
"PRIORITY" : "6",
"_MACHINE_ID" : "fffffffffff66c86aaaaaaaaaa",
"_HOSTNAME" : "linux-ar",
"_TRANSPORT" : "stdout",
"_UID" : "1000",
"_GID" : "100",
"SYSLOG_IDENTIFIER" : "struct_logs",
"MESSAGE" : "{\"key1\": \"value1\", \"key2\": 1234}",
"_PID" : "17455"
}

更进一步,您可以在 jq 的帮助下恢复准确的日志消息。
sudo journalctl -t 'struct_logs' --lines 1 --no-pager -o json-pretty | jq -r '.MESSAGE'
{"key1": "value1", "key2": 1234}

如果用户有适当的权限,也可以记录自定义 key 。服务应该能够做到这一点
sudo logger --journald <<end
MESSAGE_ID=67feb6ffbaf24c5cbec13c008dd72309
MESSAGE=The dogs bark, but the caravan goes on.
SYSLOG_IDENTIFIER=struct_logs
KEY=bark
VALUE=goes on
end

希望这可以帮助。

关于logging - Systemd 服务和结构化日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55806921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com