在日志记录配置中使用socket.SOCK_STREAM时,“套接字的协议类型错误”

时间:2016-04-21 17:56:39

标签: python sockets python-3.x logging rsyslog

我在日志配置文件中使用SysLogHandler

由于rsyslog正在我的Linux机器上运行,我想使用socket.SOCK_STREAM作为socktype实例的SysLogHandler关键字参数。确实documentation说:

  

打开TCP套接字(用于较新的syslog守护进程,例如   rsyslog),指定socket.SOCK_STREAM的值。

但是当我添加处理程序时,就像这样:

log.addHandler(logging.handlers.SysLogHandler(address='/dev/log',
                                          facility='mathmaker',
                                          socktype=socket.SOCK_STREAM))

我收到此错误:

  File "/home/zezo/dev/myapp/myapp", line 52, in <module>
    socktype=socket.SOCK_STREAM))
  File "/usr/lib/python3.4/logging/handlers.py", line 803, in __init__
    self._connect_unixsocket(address)
  File "/usr/lib/python3.4/logging/handlers.py", line 820, in _connect_unixsocket
    self.socket.connect(address)
OSError: [Errno 91] Protocol wrong type for socket

虽然似乎rsyslog正在监听/ dev / log:lsof | grep rsyslog显示:

rsyslogd   8090           syslog    0u     unix 0xffff8800b413ce00      0t0    2739240 /dev/log

1 个答案:

答案 0 :(得分:1)

看起来无法将socket.SOCK_STRE用于unix套接字。

我想我读得太快了,因为:

  

用于较新的syslog守护进程,例如rsyslog

并不意味着rsyslog被配置为使用TCP套接字(只有它可能是)。