如何配置 Syslog 让某个应用的日志写入指定文件?

通过 rsyslog 的 programname 过滤规则,把指定应用的日志路由到独立文件。本文给出完整配置步骤、权限设置与重载方法,并介绍如何用观测云 DataKit 统一采集这些文件。

最佳实践
如何配置 Syslog 让某个应用的日志写入指定文件?封面

核心做法:在 /etc/rsyslog.d/ 下新建一个配置文件,用 if $programname == '标签' then /路径/日志文件 规则把该应用的日志路由到指定文件,再用 & stop(或旧写法 & ~)阻止它被后续规则重复处理,最后重载 rsyslog 即可。

第一步:确认应用的 syslog 标签

应用写 syslog 时会带一个标识(tag),在 rsyslog 里对应 $programname 属性。可以先在 /var/log/syslog/var/log/messages 里 grep 一下应用名,确认它的实际标签。

第二步:编写路由规则

创建独立配置文件(推荐放在 /etc/rsyslog.d/,比改主配置文件更易维护):

sudo nano /etc/rsyslog.d/50-myapp.conf

写入:

# 把标签为 myapp 的日志写入独立文件
if $programname == 'myapp' then /var/log/myapp.log
# 阻止这些日志继续被后面的规则处理
& stop

不加 & stop 的话,日志还会同时落进 /var/log/syslog,造成重复。

第三步:准备文件并设置权限

sudo touch /var/log/myapp.log
sudo chown syslog:adm /var/log/myapp.log
sudo chmod 640 /var/log/myapp.log

第四步:检查语法并重载

sudo rsyslogd -N1        # 语法检查
sudo systemctl restart rsyslog

然后让应用打几条日志,tail -f /var/log/myapp.log 验证。

观测云对照

文件类日志可以用观测云 DataKit 的日志采集功能直接收集:在采集配置中指定日志文件路径(支持通配符),DataKit 会实时跟踪文件并把日志上报到观测云,可在日志查看器中检索、做告警,不需要登录服务器翻文件。 如果日志还需要清洗,可以结合 Pipeline 做字段提取和脱敏。

常见问题(FAQ)

Q:为什么日志还是写进了 /var/log/syslog?
A:缺少 & stop(或 & ~)指令,或者你的规则文件名排序在默认规则之后。/etc/rsyslog.d/ 下的文件按字典序加载,建议用 50- 前缀确保先于默认规则生效。

Q:除了按 programname,还能按什么过滤?
A:可以按 $hostname$msg(消息内容,支持正则,如 $msg contains 'ERROR')、facility(如 local0.*)等属性过滤。

Q:多个应用要写不同文件怎么办?
A:在同一个配置文件里写多条 if ... then ... 规则即可,每条对应一个标签和目标文件。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台