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

Python 3.6.4无法写入/var/log/messages:执行代码无报错但无日志

解决Python 3.6.4无法写入/var/log/messages的问题

我来帮你排查这个问题——执行代码没报错但日志没出现在/var/log/messages里,通常是SysLogHandler的默认配置和系统syslog服务不匹配导致的,下面是具体的排查和修复步骤:

1. 明确指定SysLogHandler的socket路径

很多现代Linux发行版(比如使用systemd的CentOS/RHEL、Ubuntu等),syslog服务的unix socket路径可能不是Python默认的配置。你可以尝试直接指定系统实际的socket路径来连接:

修改你的测试代码,显式设置socket参数:

import logging
import logging.handlers

logger = logging.getLogger('example')
logger.setLevel(logging.DEBUG)
# 指定系统的syslog unix socket路径,常见的是'/dev/log'或'/run/systemd/journal/syslog'
syslog_handler = logging.handlers.SysLogHandler(address='/dev/log')
syslog_handler.setLevel(logging.DEBUG)
logger.addHandler(syslog_handler)
logger.critical('Hello world')

执行这段代码后,再去查看/var/log/messages是否有内容。

2. 检查syslog服务的配置,确保接收对应日志级别和设施

默认情况下,SysLogHandler使用的是user设施(facility),日志级别是DEBUG及以上。你需要确认系统的syslog服务(比如rsyslog)是否将user级别的日志写入/var/log/messages:

  • 打开rsyslog的配置文件(通常是/etc/rsyslog.conf或/etc/rsyslog.d/*.conf)
  • 查找类似下面的规则,确保包含user.*:
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    
    如果没有user.*,可以修改为:
    *.info;user.*;mail.none;authpriv.none;cron.none                /var/log/messages
    
  • 重启rsyslog服务:systemctl restart rsyslog

3. 验证日志是否被syslog接收

如果上面的步骤还没解决,可以先确认日志是否真的发送到了syslog服务:

  • 执行tail -f /var/log/rsyslog(或者系统对应的syslog日志文件),再运行你的Python代码,看是否有对应的日志条目
  • 也可以使用logger命令测试系统syslog是否正常:logger -p user.critical "Test from logger command",然后查看/var/log/messages是否有这条测试日志,如果没有,说明是syslog配置的问题,不是Python代码的问题

4. 检查Python进程的权限

虽然你执行命令没报错,但也要确保运行Python的用户有访问syslog socket的权限(通常/dev/log的权限是root:adm,普通用户也能写入,但如果是特殊环境比如容器,可能会有问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:20