0

我有一个 Python 进程,其输出在其他处理程序中通过 tcp 记录到 syslog 服务器。系统日志服务器可能会不时发生一些停机时间。无论日志记录机制如何,我都需要运行脚本。是否有任何选项/常用(或内置)库用于缓冲日志并无限重试我可能丢失的,或者我是否需要为我的日志编写一个自定义包装类来处理缓冲和重试?

当我停止 syslog 服务器时会出现问题,在这种情况下,任何“记录器”语句都会引发错误并停止脚本执行。

import logging
from logging.handlers import SysLogHandler
...
logger = logging.getLogger()
handler = SysLogHandler(address=syslog_address, socktype=socket.SOCK_STREAM)
logger.addHandler(handler)
...
logger.info("Some statements all over my code I want logged and buffered if possible but I do not want to raise exceptions stopping execution and I don't want to repeat myself wrapping them all in try/except blocks"
4

1 回答 1

0

python 为此提供的内置功能是QueueHandler。您所做的是将 SysLogHandler 移动到具有 QueueListener 的单独线程(或进程),并在应用程序中将其替换为 QueueHandler。这样,您就可以使您的应用程序免受系统日志引起的故障的影响,并且队列消息会自动缓冲。使用Queue实现无限重试非常容易,只需将失败的任务放回去。

于 2019-08-19T07:55:32.740 回答