如何防止 python 日志记录模块在停机、永久重试和缓冲事件时引发停止执行的错误



我有一个Python进程,其输出与其他处理程序一起通过tcp记录到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"

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

最新更新