gpt4 book ai didi

python - SocketHandler 的客户端/服务器日志记录模块超时

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:49 24 4
gpt4 key购买 nike

我正在使用 SocketHandler 实现 python logging 模块来记录来自多台远程计算机的消息。

客户端部分:

    ......

if self.loggerHost == "localhost":
self.loggerHost = socket.gethostname()
.......

self.logger = logging.getLogger(self.handleName)

self.logger.setLevel(logging.DEBUG)

numberOfHandles = len(self.logger.handlers)

# are there no handles in the logger
if numberOfHandles == 0:

self.loggerPort = logging.handlers.DEFAULT_TCP_LOGGING_PORT

self.socketHandler = logging.handlers.SocketHandler(self.loggerHost, self.loggerPort)

self.logger.addHandler(self.socketHandler)

......

# send the new handle to Handle table
self.__NewHandle(paramsDict=paramDict)

__NewHandle 方法创建一个新日志:

def __NewHandle(self, paramsDict):

.......

# update logger with new log! (trace)
self.logger.debug(xmlString)

服务器部分:

 while not self.abort:

rd, wr, ex = select.select([self.socket.fileno()],
[], [],
self.timeout)

# we have a read list available to read and process
if rd:
self.handle_request()

.......

问题:

当服务器可用时,一切正常,每个日志记录速度非常快~0.1 [mS],但是当服务器不可用时,日志记录很慢,第一个日志可能需要长达 1 [秒],这对于生产来说是 Not Acceptable .

我在 python 文档中找不到任何控制日志记录超时的属性(客户端)

因此,如果我使用 logger.debug("....") 就不会花费太多时间。

有谁知道如何为日志记录操作设置超时?或者如果服务器没有响应,最好忽略它?

最佳答案

我认为如果服务器没有响应,最好忽略它,因为您无法知道服务器何时会重新上线,并且您通常不希望因为日志记录而暂停应用程序。

顺便说一句,当套接字连接尝试失败时,SocketHandler 会尝试使用指数退避策略重新连接,并使用以下属性及其默认值

retryStart = 1.0
retryMax = 30.0
retryFactor = 2.0

因此,如果套接字创建失败,它将在 retryStart 秒后重试(在下一次日志记录调用时),并且在每次后续失败后,重试之前的延迟将增加 retryFactor 最多 retryMax

关于python - SocketHandler 的客户端/服务器日志记录模块超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com