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

如何阻止syslog()消息发送至journal daemon

我来帮你解决这个问题——在Ubuntu 16.04里,systemd-journald默认会监听syslog的socket(/dev/log),所以你的应用通过syslog()发送的日志会同时被rsyslog和journald捕获,这不仅导致日志出现在journalctl里,还可能因为重复处理拉高CPU使用率。下面是两种可行的解决方式,你可以根据需求选择:

方法1:让journald停止监听syslog socket(推荐)

这种方法能彻底切断journald对syslog消息的捕获,从根源解决重复处理的问题:

  1. 编辑journald的配置文件:
    sudo nano /etc/systemd/journald.conf
    
  2. 找到#SyslogSocket=这一行,去掉注释并修改为:
    SyslogSocket=null
    
    这个配置会让journald不再创建或监听syslog socket,所有syslog消息只会被rsyslog接收。
  3. 重启journald服务使配置生效:
    sudo systemctl restart systemd-journald
    
  4. 确认rsyslog已启用imuxsock模块(它负责监听syslog socket):
    打开/etc/rsyslog.conf,确保下面这行没有被注释:
    $ModLoad imuxsock
    
    如果被注释了,去掉注释后保存文件。
  5. 重启rsyslog服务:
    sudo systemctl restart rsyslog
    

完成后,你的应用日志就只会按照rsyslog.conf的规则存入指定文件,不会再出现在journalctl输出中,CPU使用率也会随之下降。

方法2:仅阻止特定应用日志进入journald

如果你只想让自己应用的日志不进入journald,而保留其他系统日志的journal记录,可以在rsyslog规则中添加过滤:

  1. 找到rsyslog中处理你应用日志的规则(可能在/etc/rsyslog.conf或/etc/rsyslog.d/下的配置文件里),假设你的应用日志用local0设施标识,或者有特定的tag(比如myapp)。
  2. 在写入日志文件的规则后添加& stop,示例如下:
    local0.* /var/log/myapp.log
    & stop
    
    这会让rsyslog处理完这条日志后停止继续传递。不过要注意:这种方法仅在rsyslog优先于journald接收消息时有效,若journald仍直接监听syslog socket,可能还是会捕获到消息,所以方法1更稳妥。

⚠️ 小提醒:修改配置前建议备份原文件,比如sudo cp /etc/systemd/journald.conf /etc/systemd/journald.conf.bak,避免配置出错无法恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:36