python: 测试将日志发送到 Syslog 服务器

python: To test sending logs to Syslog Server

请帮助我,如何将 python 脚本日志发送到 syslog 服务器(syslog-ng 产品),我已经尝试过以下方法。它有两种方法。一个是 '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: 使用 syslogHandler 我得到 ConnectionRefusedError 因为我的远程服务器无法访问,可能我会用户尝试..except 方法..但我不确定为什么我得到 AttributeError: 'SysLogHandler' object has no attribute 'socket'

SocketHandler: Python 日志模块处理程序页面说这个 class 用于通过 TCP 将日志发送到远程。但是我看不到任何输出,并且不确定这是否是将日志发送到系统日志服务器的正确方法。

请帮忙..

提前致谢。

这不是一个合适的解决方案,如果不是绝对需要使用 TCP,我建议您使用 UDP。它解决了我在 syslog 处理程序方面的很多问题。 TCP 似乎想要将消息捆绑在一起,具有讽刺意味的是它在批处理过程中丢失了一些消息。

当我在我的计算机上使用已启动并侦听端口 611 的系统日志服务器尝试此操作时,它没有在 SysLogHandler 上引发 AttributeError。所以你应该设置一个服务器来监听那个端口来修复那个