我在 systemd 中注册了一个特定的自定义服务,它会向 stdout/stderr 发送大量日志。我想从 journalctl 输出中删除日志(因为它们在那里产生了很多噪音,有时也会被 journald “旋转”和删除)放入一个文件中在 /var/log/ 中。我还想为其设置日志轮换和压缩(理想情况下,每日轮换+压缩,包含存档文件删除时间早于最近 N 天)。
我不知道如何在 Ubuntu 16.04 中配置它。我尝试用 Google 搜索,但令人惊讶的是,我无法找到适合我的情况的合理解决方案。以下是我尝试设计的方法,但每次都有严重的缺点:
想法 1:rsyslog +...什么?
基于答案+额外评论在 stackoverflow 上,我了解到“推荐的优雅解决方案”将日志从 journalctl 复制到文件似乎是:
SyslogIdentifier=<CUSTOM_ID>
在我的*.service 文件中添加一个;创建
/etc/rsyslog.d/<CUSTOM_NAME>.conf
如下内容::programname, isequal, "<CUSTOM_ID>" /var/log/<CUSTOM_LOG>.log
然而,对我来说这似乎有两个缺点:
- journalctl 输出仍然很嘈杂,
- 没有日志轮换。
想法 2:rsyslog + logrotate?但是怎么做呢?
继续想法 1,尝试添加旋转:基于对 rsyslog + rotate 的谷歌搜索,我发现了一篇文章提到rsyslog 对日志轮换有一些基本的支持。然而,这似乎需要另外编写一个自定义 shell 脚本一旦日志达到轮换标准,就会进行实际轮换。我甚至不确定这是否允许基于日期的标准。
我希望避免创建自定义 shell 脚本来进行日志轮换,因为已经有了日志旋转。但我不明白是否可以配置 logrotate 来在这里使用它代替“自定义脚本”我发现关于 logrotate 的所有信息似乎都集中在为整个操作系统全局运行它,而不是像 rsyslog 那样一次性使用...所以我不知道该如何完成这个想法。:/
想法3:shell重定向+...什么?
我正在考虑恢复使用旧的、丑陋的 shell 重定向作为“日志记录机制”,因为这可以解决 journalctl 输出嘈杂的问题。
然而,除了这是“不优雅”和一般“你应该为这样做感到内疚,坏坏男孩”,我仍然不知道如何配置日志轮换那么在这种情况下......
概括
我真的很困惑并且非常失望,因为似乎没有一种简单的方法来配置它,对我来说,这是一种非常明显的情况,我认为它应该是常见的并且有一个简单的答案。
你能帮我配置一下吗?
或者我可能遗漏了什么?