1. ホーム
  2. python

[解決済み] ロギング設定でsocket.SOCK_STREAMを使用すると「プロトコルがソケットのタイプとして間違っている」と表示される。

2022-02-14 11:31:54

質問

私は SysLogHandler をロギング設定ファイルに追加しました。

として rsyslog は私のリナックスボックス上で動作しているので、私は socket.SOCK_STREAM として socktype のキーワード引数です。 SysLogHandler インスタンスを作成します。また ドキュメント には確かに書いてある。

TCPソケットを開くには(以下のような新しいシスログデーモンで使用するため)。 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

解決方法は?

unixのソケットでsocket.SOCK_STREAMを使用することはできないようです。

として、ドキュメントを読むのが早すぎたようです。

rsyslog のような新しい syslog デーモンで使用するため。

は、rsyslog が TCP ソケットを使用するように設定されていることを意味しません (そうなる可能性があるということだけです)。