私を助けてください、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サーバーにログを記録します。
助けてください..
前もって感謝します。
これは適切な解決策ではありません。TCPを使用する必要がない場合は、UDPを使用することをお勧めします。 syslogハンドラーに関する私の問題の多くを解決しました。 TCPはメッセージを一緒にバンドルすることを望んでいるようで、皮肉にもバッチ処理でいくつかのメッセージを失いました。
起動していてポート611をリッスンしているsyslogサーバーを使用して自分のコンピューターでこれを試したところ、SysLogHandlerでAttributeErrorが発生しませんでした。そのポートをリッスンするようにサーバーを設定して修正する必要があります