我喜欢使用 systemd 的日志来查看和管理我自己的脚本的日志。我已经意识到您可以根据每条消息从我的用户脚本登录日志。
echo 'hello' | systemd-cat -t myscript -p emerg
Run Code Online (Sandbox Code Playgroud)
有没有办法将所有消息重定向到日志,甚至是由其他命令生成的消息?喜欢..
exec &> systemd-cat
Run Code Online (Sandbox Code Playgroud)
更新:
取得了部分成功。从终端尝试了Inian的建议。
~/scripts/myscript.sh 2>&1 | systemd-cat -t myscript.sh
Run Code Online (Sandbox Code Playgroud)
它起作用了,stdout 和 stderr 被定向到 systemd 的日志。奇怪的是,
~/scripts/myscript.sh &> | systemd-cat -t myscript.sh
Run Code Online (Sandbox Code Playgroud)
在我的 Bash 终端中不起作用。
当其他程序调用我的脚本时,我仍然需要找到一种方法在我的脚本中执行此操作。
我试过..
exec 2>&1 | systemd-cat -t myscript.sh
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
更新2:
从航站楼出发
systemd-cat ~/scripts/myscript.sh
Run Code Online (Sandbox Code Playgroud)
作品。但我仍在寻找一种从脚本中执行此操作的方法。
我有一个类型为 的 systemd 服务simple。
我希望我的服务记录键值对。
到目前为止,我的简单服务只是以自定义键值语法将其日志打印到标准输出。
我想避免我的自定义键值语法,它使用官方方式进行结构化日志记录。
有没有办法在 systemd 中使用结构化日志?
例如,我的服务将其写入标准输出:
{"key1": "value1", "key2": 1234}
Run Code Online (Sandbox Code Playgroud)
如果 systemd 能够将字符串读取为 json 就太好了。
我将我的应用程序用作 SystemD 服务,并且需要在每条消息前添加<LEVEL>JournalD 的入门级别,例如:
<6> this is info
<7> this is debug
<4> this is warning
Run Code Online (Sandbox Code Playgroud)
否则,JournalD 将所有条目视为同一级别,我想使用其高级功能仅显示特定级别的日志。
<6>如何使用 uber-zap 库在每个日志条目前面添加正确的级别标签(例如 Info )?
编辑:这是我的记录器配置的相关部分:
<6> this is info
<7> this is debug
<4> this is warning
Run Code Online (Sandbox Code Playgroud) 似乎在上面找不到任何东西,我也是一个奇怪的人。
我有一个非常频繁地插入数据库记录的 python 程序,它仍在这样做,所以我知道该程序仍在运行。
我将程序设置为 systemctl 中的服务单元,并记录到 journalctl。
几个月来日志一直很好,但今天 1 点钟停止将日志添加到该单元的日志数据中。
这只是内存问题吗?我不知道为什么,但我认为 journalctl 会处理这个问题。
Slogger2(系统记录器)和基于 Linux 的syslog有什么区别?
我了解Journald 和 syslog 之间的区别。Slogger2 还提供了一种将系统日志消息重定向到 slogger2 的方法。
它是处理 palin 文本文件的 QNX 版本的 syslog 吗?它是否也使用类似logrotate的工具来处理文件大小?
我正在开发一个使用syslog(). 然后我配置rsyslog服务将日志保存在Linux. 大多数时候这个过程正常进行。但有时,某些日志不会发送到rsyslog. 相反,我可以在使用journalctl -f -u Myservice命令时观看它们。我正在使用Debian Jessie的版本Linux。您知道问题是什么以及如何解决吗?