SyslogIdentifier 是 systemd 服务中标识日志来源的关键字段,需配合 StandardOutput=syslog 或 StandardError=syslog 才生效,值作为 $programname 用于 rsyslog 过滤与拆分。

这个值会作为 $programname 出现在 syslog 消息中,是后续日志过滤、拆分和归档的基础。不设置或设置不当会导致日志混入 user.info 等通用通道,难以定位。
必须配合 StandardOutput/StandardError 使用
仅写 SyslogIdentifier=myapp 不起作用。它只在标准输出或错误被明确导向 syslog 时才生效:
-
StandardOutput=syslog—— stdout 输出走 /dev/log socket,由 rsyslog 接收 -
StandardError=syslog—— stderr 同样走 syslog,与 stdout 分离但共用同一标识符 - 两者可不同设(如 stdout 走 journal,stderr 走 syslog),但要“打上 myapp 标签”,至少 stderr 或 stdout 中一个需为
syslog
推荐写法:显式声明、大小写一致、无空格
在 [Service] 段中直接写:
Agent 记忆系统 — 五路融合检索 + 双时间线 + 因果链 + Spirit管家 + 记忆回声 + 弹性配置 + Circuit Breaker + GDPR合规 + 192项安全审计修复
SyslogIdentifier=myapp
- 不要用下划线或点号开头(部分 syslog 实现可能截断)
- 避免大写字母(
MyApp可能被某些 rsyslog 规则忽略) - 不加引号,不带路径,就是一个简洁的标识字符串
- 若服务名为
nginx.service,建议设为SyslogIdentifier=nginx,而非nginx.service
验证是否生效
重启服务后,在终端执行:
journalctl -t myapp -n 20
或直接查 syslog 文件:
grep 'myapp:' /var/log/syslog | tail -10
- 看到类似
Oct 12 10:23:45 host myapp[1234]: Server started即表示成功 - 若只看到
myapp.service[1234]: ...,说明SyslogIdentifier未生效,检查是否漏配StandardOutput=syslog
进阶:配合 rsyslog 拆分日志文件
在 /etc/rsyslog.d/10-myapp.conf 中添加:
if $programname == 'myapp' then /var/log/myapp.log & stop
- 第一行把所有
myapp标识的日志写入独立文件 -
& stop阻止日志重复落入/var/log/syslog,保持主日志干净 - 记得
sudo systemctl restart rsyslog

















