web-dev-qa-db-ja.com

python:Syslogサーバーへのログの送信をテストするには

私を助けてください、pythonスクリプトログをsyslogサーバー(syslog-ng製品)に送信する方法)、私はすでに以下の方法を試しました.. 2つのアプローチがあります。1つは 'SysLogHandler'によるもので、他は「SocketHandler」と一緒です

import logging
import logging.handlers
import socket

my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

handler = logging.handlers.SysLogHandler(address=('10.10.11.11', 611), socktype=socket.SOCK_STREAM)
#handler = logging.handlers.SocketHandler('10.10.11.11', 611)

my_logger.addHandler(handler)

my_logger.debug('this is debug')
my_logger.critical('this is critical')

結果:SysLogHandler

[ansible@localhost ~]$ python test.py
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    handler = logging.handlers.SysLogHandler(address=('10.10.11.11', 611), socktype=socket.SOCK_STREAM)
  File "/usr/lib64/python3.6/logging/handlers.py", line 847, in __init__
    raise err
  File "/usr/lib64/python3.6/logging/handlers.py", line 840, in __init__
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused #THIS IS OK for me since server unreachable.
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/__init__.py", line 1946, in shutdown
    h.close()
  File "/usr/lib64/python3.6/logging/handlers.py", line 894, in close
    self.socket.close()
AttributeError: 'SysLogHandler' object has no attribute 'socket'

result: SocketHandler ==> No output ..機能しているかどうかはわかりません。

TCPポートを介してsyslogサーバーにログを送信するための適切なアプローチが何かはわかりません。syslogHandlerとSocketHandlerの両方を使用しました。

syslogHandler: using syslogHandlerリモートサーバーにアクセスできないため、ConnectionRefusedErrorを取得しています。おそらくtry..exceptメソッドを使用します。しかし、なぜAttributeError: 'SysLogHandler' object has no attribute 'socket'

SocketHandler: Pythonロギングモジュールハンドラーページでは、このクラスはTCPを介してリモートにログを送信するために使用されると記載されています。 syslogサーバーにログを記録します。

助けてください..

前もって感謝します。

4
Maria628

これは適切な解決策ではありません。TCPを使用する必要がない場合は、UDPを使用することをお勧めします。 syslogハンドラーに関する私の問題の多くを解決しました。 TCPはメッセージを一緒にバンドルすることを望んでいるようで、皮肉にもバッチ処理でいくつかのメッセージを失いました。

起動していてポート611をリッスンしているsyslogサーバーを使用して自分のコンピューターでこれを試したところ、SysLogHandlerでAttributeErrorが発生しませんでした。そのポートをリッスンするようにサーバーを設定して修正する必要があります

1
AlmogAtNailo