Python SysLogHandler不工作:socket.error'连接被拒绝'

时间:2013-10-02 12:07:56

标签: python logging syslog

我正在尝试使用标准Linux syslogger配置Python应用程序以登录/ var / log / messages。但是,当我尝试创建syslog处理程序时,我收到错误socket.error: [Errno 111] Connection refused

>>> import logging
>>> import logging.handlers
>>> logger = logging.getLogger("my_logger")
>>> logger.setLevel(logging.DEBUG)
>>> handler = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON, address="/var/log/messages")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/logging/handlers.py", line 715, in __init__
    self._connect_unixsocket(address)
  File "/usr/lib64/python2.6/logging/handlers.py", line 731, in _connect_unixsocket
    self.socket.connect(address)
  File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused

/etc/rsyslog.conf配置了以下行:

kern.notice;*.err;local0.info;mail.none;authpriv.none;cron.none;local1.none;daemon.notice /var/log/messages

我猜这个问题在syslog的配置中,但据我所知,我做了正确的事情:

  • 我正在尝试创建Python SysLogHandler,并告诉它使用哪个文件
  • 我告诉SysLogHandler使用DAEMON设施
  • rsyslog.conf设置为将守护程序日志发送到/ var / log / messages(以及其他日志)

我还应该做些什么来使这项工作?

以前我只使用了logging.FileHandler,但是当消息文件换行时,这不能正常工作,Python继续记录到旧文件。

1 个答案:

答案 0 :(得分:6)

您需要指向实际的unix域套接字,而不是日志文件。 Python docs

试试这个:

import logging
import logging.handlers
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler(
    facility=logging.handlers.SysLogHandler.LOG_DAEMON, address="/dev/log")