【发布时间】:2016-10-17 16:34:59
【问题描述】:
我有一个进程使用 logging.SyslogHandler 通过 TCP 将日志发送到 syslog 服务器。 不幸的是,如果系统日志服务器由于某种原因重新启动,该进程将停止发送日志并且无法重新建立连接。
我想知道是否有人知道克服这种行为并强制 logging.SyslogHandler 重新建立连接的方法。
使用处理程序的代码类似于:
import logging
import logging.handlers
import logging.config
logging.config.fileConfig('logging.cfg')
logging.debug("debug log message")
logging.cfg:
[loggers]
keys=root,remote
[handlers]
keys=local,remote
[logger_remote]
qualname=remote
level=INFO
handlers=remote
[logger_root]
qualname=root
level=DEBUG
handlers=local
[handler_local]
class=handlers.StreamHandler
level=DEBUG
formatter=local
args=(sys.stdout,)
[handler_remote]
class=handlers.SysLogHandler
level=DEBUG
formatter=remote
args=(('localhost', 514), handlers.SysLogHandler.LOG_USER, 1)
[formatters]
keys=local,remote
[formatter_local]
format=%(module)s %(levelname)s %(message)s
[formatter_remote]
format=%(asctime)s %(message)s
系统日志服务器重新启动后我不断收到的错误是:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/logging/handlers.py", line 866, in emit
self.socket.sendall(msg)
File "/usr/local/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 32] Broken pipe
如果有任何见解,我将不胜感激。 谢谢!
【问题讨论】:
-
('localhost', 514)意思是“你好我的root朋友你好吗?谁告诉你可以使用514端口?(只能用作目标,不能用作源)”