gpt4 book ai didi

从多个进程使用 CloudLoggingHandler 进行日志记录

转载 作者:行者123 更新时间:2023-12-03 19:45:06 27 4
gpt4 key购买 nike

当日志由多个进程生成时,哪种是收集日志并将其发送到谷歌云日志的首选方式?

这是我基于 CloudLoggingHandler 的提案,您愿意批评它吗?

import google
from multiprocessing import Process
from logging import getLogger

class Worker(Process):
def __init__(self):
super(Worker, self).__init__()

def __setup_logger(self):
handler = CloudLoggingHandler(google.cloud.logging.Client(), name='log-name')
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
google.cloud.logging.handlers.setup_logging(handler)

def run(self):
self.__setup_logger()
for i in range(10):
logging.warning("i=%d", i)

if __name__ == "__main__":
for _ in range(2):
w = Worker()
w.start()

我读到了基于队列的日志处理程序 here ,但 CloudLoggingHandler 在隔离线程中使用批量提交,因此基于队列的处理程序将是矫枉过正。我对么 ?

Sources表示 CloudLoggingHandler 是线程安全的,因此让所有进程共享一个 CloudLoggingHandler 实例可能就足够了。它会起作用吗?如果是这样是不是太苛刻了?

下面进行编辑以回答@thomas-schultz。

我坚持我的提议,主要是因为我在做原型(prototype)设计,它“开箱即用”,而且我没有检查性能问题。我正在重新考虑这个选择。

确实,据我了解 CloudLoggingHandlerBackgroundThreadTransport阻塞主线程,直到日志发送到日志端点。几乎每个日志行都会发生这种情况。实际上,只要有一条日志记录 ( cf source),就会发送批处理。

在我的开发环境中,当多个进程同时记录时,一个进程会等待长达 1 秒的时间来发送日志。我想这主要是网络成本,它会从谷歌数据中心缩小到“不那么多”。

我正在考虑定义一个 StreamHandler这会将所有日志记录推送到 Queue . Process 将读取此队列它将负责将日志发送到日志记录端点。如果相关,此过程可能依赖 CloudLoggingHandler 来执行此操作。

这有意义吗?

最佳答案

我认为这可能是矫枉过正,除非您遇到连接问题或某种需要排队的情况。

在这种情况下,您可能会使用 CloudLoggingHandler 的相同实例。但这样做可能存在一些性能瓶颈。我不完全确定。

这里有更多关于与 Python 的标准库记录器集成的信息。
https://googlecloudplatform.github.io/google-cloud-python/stable/logging-usage.html#integration-with-python-logging-module

我很好奇你是否得到了不同的答案?

关于从多个进程使用 CloudLoggingHandler 进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221541/

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