我在日志配置文件中使用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
答案 0 :(得分:1)
看起来无法将socket.SOCK_STRE用于unix套接字。
我想我读得太快了,因为:
用于较新的syslog守护进程,例如rsyslog
并不意味着rsyslog被配置为使用TCP套接字(只有它可能是)。