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

python:测试向Syslog服务器发送日志,python,syslog,python-logging,Python,Syslog,Python Logging,请帮助我,如何将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

请帮助我,如何将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'
[ansible@localhost~]$python test.py
回溯(最近一次呼叫最后一次):
文件“test.py”,第8行,在
handler=logging.handlers.SysLogHandler(地址=('10.10.11.11',611),socktype=socket.SOCK\u流)
文件“/usr/lib64/python3.6/logging/handlers.py”,第847行,在__
提出错误
文件“/usr/lib64/python3.6/logging/handlers.py”,第840行,在__
sock.connect(sa)
ConnectionRefusedError:[Errno 111]连接被拒绝#这对我来说没问题,因为无法访问服务器。
atexit中出错。\u运行\u退出功能:
回溯(最近一次呼叫最后一次):
文件“/usr/lib64/python3.6/logging/_init__.py”,第1946行,处于关闭状态
h、 关闭()
文件“/usr/lib64/python3.6/logging/handlers.py”,第894行,关闭
self.socket.close()
AttributeError:“SysLogHandler”对象没有属性“socket”
结果:SocketHandler==>无输出
。。我不确定它是否有效

我不确定通过TCP端口向syslog服务器发送日志的正确方法。。我使用了syslogHandler和SocketHandler

syslogHandler:
使用
syslogHandler
我得到的是
ConnectionRefusedError
,因为我的远程服务器无法访问,可能我将使用户尝试..方法除外。。但我不确定为什么我会得到AttributeError:'SysLogHandler'对象没有属性'socket'

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

请帮忙


提前感谢。

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


当我在我的计算机上尝试使用syslog服务器并监听端口611时,它没有在SysLogHandler上引发AttributeError。因此,您可能应该设置一个服务器,在该端口上侦听以修复此问题,有人可以帮助我解决上述问题吗?这不是一个合适的解决方案,如果不是绝对需要使用TCP,我建议您使用UDP。它解决了我在syslog处理程序中的许多问题。TCP似乎想将消息捆绑在一起,具有讽刺意味的是,它在批处理过程中丢失了一些消息。当我在我的计算机上尝试此操作时,syslog服务器正在运行并侦听端口611,它没有在
SysLogHandler
上引发
AttributeError
。因此,您可能应该设置一个服务器,在该端口上侦听以修复此问题,非常感谢。。我认为属性错误与syslog服务器的可访问性无关。关于syslog协议,我只能使用TCP。别无选择。