You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下Yocto Project中自定义rsyslog规则无法写入指定文件

问题根源分析

从你给出的日志格式能直接定位问题:

  • 用logger命令测试时,日志是符合syslog规范的结构化格式,rsyslog能正确提取$programname字段,所以规则生效。
  • 但实际程序输出的正确程序名(diagnostic)的日志是非结构化的,没有包含programname的标识字段,rsyslog根本无法识别这条日志的程序名为diagnostic,自然不会触发你的路由规则。
  • 而拼写错误(iagnostic)时的日志是标准RFC5424格式,包含明确的程序名字段,rsyslog能识别,但这不是你要的目标程序名。
解决方案

方案1:修改程序日志输出方式(推荐)

让程序通过syslog接口发送日志,而不是直接打印到标准输出/错误。比如在代码里调用syslog相关库(Python的logging.handlers.SysLogHandler、C语言的syslog()函数),指定程序名为diagnostic。这样日志会以结构化的syslog格式发送给rsyslog,你的现有规则就能正常匹配。

方案2:修改rsyslog规则适配非结构化日志

如果无法修改程序代码,只能基于日志内容的特征来匹配:
比如如果日志里固定包含"Diagnostic from"这样的关键词,可修改00-myApp-rsyslog.conf:

if $msg contains 'Diagnostic from' then /var/log/myApp-diagnostics.log
& stop

或者结合固定主机字段强化匹配:

if $hostname == 'qemux86-64' and $msg contains 'Diagnostic from' then /var/log/myApp-diagnostics.log
& stop

注意:这种基于内容匹配的方式可靠性不如结构化字段匹配,一旦日志内容格式变化,规则就会失效。

额外检查点

确认实际程序的日志是直接输出到syslog,还是先到systemd journal再转发到rsyslog。如果是后者,需要确保/etc/systemd/journald.conf中ForwardToSyslog=yes,且转发时保留程序元数据。

内容的提问来源于stack exchange,提问作者Miss Anfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:33:16