Python 如何写日志到 syslog(SysLogHandler 用法)?

Python 写 syslog 用 logging.handlers.SysLogHandler:指定 /dev/log(Linux)或 UDP 514(远程),配合 formatter 输出标准格式。本文给出本机与远程两种配置及 macOS/Linux 差异。

最佳实践
Python 如何写日志到 syslog(SysLogHandler 用法)?封面

标准库自带方案:logging.handlers.SysLogHandler——本机用 address='/dev/log'(macOS 是 /var/run/syslog),远程 syslog 服务器用 address=('host', 514) 走 UDP。

本机 syslog

import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger('myapp')
logger.setLevel(logging.INFO)

handler = SysLogHandler(address='/dev/log')   # macOS 用 /var/run/syslog
handler.setFormatter(logging.Formatter('myapp[%(process)d]: %(levelname)s %(message)s'))
logger.addHandler(handler)

logger.info('应用启动完成')
logger.error('出错了')

日志出现在 /var/log/syslog(Ubuntu)或 /var/log/messages(RHEL),可用 logger 命令行验证。

远程 syslog 服务器

handler = SysLogHandler(address=('logserver.internal', 514))

默认 UDP;需要可靠性选 TCP(SysLogHandler 的 socktype=socket.SOCK_STREAM)。

观测云对照

写到 syslog 的日志可由观测云 DataKit 的 syslog 采集器统一接收上报;应用也可以直接用 DataKit 的日志 HTTP 写入接口跳过 syslog 层。

常见问题(FAQ)

Q:报 "No such file or directory"? /dev/log 不存在——系统没跑 syslog 服务,装 rsyslog 或改用 UDP 地址。

Q:facility 能指定吗? 能,SysLogHandler(facility=SysLogHandler.LOG_LOCAL0)

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台