python - 在日志记录配置中使用socket.SOCK_STREAM时为"Protocol wrong type for socket"

标签 python sockets python-3.x logging rsyslog

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

rsyslog正在我的linux机器上运行,我想使用socket.SOCK_STREAMsocktype SysLogHandler 的关键字参数实例。 documentation确实说:

To open a TCP socket (for use with the newer syslog daemons such as rsyslog), specify a value of 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

最佳答案

看起来不可能对 unix 套接字使用 socket.SOCK_STREAM。

我认为我读文档的速度太快了,因为:

for use with the newer syslog daemons such as rsyslog

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

关于python - 在日志记录配置中使用socket.SOCK_STREAM时为"Protocol wrong type for socket",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777090/

相关文章:

python - 查找具有重复值的字典键

python - 停止 shutil.make_archive 向自身添加存档

c - 非阻塞 TCP 接受器不从套接字读取

python - 如何在 Python 中初始化元组子类的实例?

python - 是否可以使用 XPATH 和 Selenium 从 Python 中的特定 div 开始计数?

python - python中concurrent.futures的异步和requests-futures的异步有什么区别?

python - 如何排除 django 模型中的选择字段值?

c# - 如何让我的 lua tcp 服务器接收来自 c# tcp 客户端的消息?

c# - 网络服务发现

python - Python 中的字典功能的迭代