我使用logging
实现python SocketHandler
模块来记录来自多台远程计算机的消息。
客户端部分:
......
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秒[秒]这对生产来说是不可接受的
我无法在python文档中找到任何attribute
来控制日志记录的超时(客户端)
因此,如果我使用logger.debug("....")
,则不会花费太多时间。
是否知道如何为日志记录操作设置超时?如果服务器没有响应,甚至更好地忽略它?
答案 0 :(得分:1)
我认为如果没有来自服务器的响应,最好忽略它,因为你无法知道服务器什么时候会重新上线,而且你通常不想因为记录而保持应用程序。< / p>
BTW SocketHandler
,当套接字连接尝试失败时,尝试使用指数退避策略重新连接,使用以下属性及其默认值
retryStart = 1.0
retryMax = 30.0
retryFactor = 2.0
因此,如果套接字创建失败,它将在retryStart
秒之后再次尝试(在下一次日志记录调用中),并且在每次后续失败之后,重试之前的延迟将增加retryFactor
upto {{ 1}}。