【发布时间】:2021-04-30 21:52:00
【问题描述】:
我很难找出我的日志条目在 Cloud Logging 中重复的原因。 我使用了一个什么都不做的自定义虚拟处理程序,并且我还使用了一个命名记录器。
这是我的代码:
import google.cloud.logging
import logging
class MyLogHandler(logging.StreamHandler):
def emit(self, record):
pass
# Setting Up App Engine's Logging
client = google.cloud.logging.Client()
client.get_default_handler()
client.setup_logging()
# Setting Up my custom logger/handler
my_handler = MyLogHandler()
logging.getLogger('my_logger').addHandler(my_handler)
logging.getLogger('my_logger').setLevel(logging.DEBUG)
logging.getLogger('my_logger').debug('Why this message is being duplicated?') # please note that i'm logging into 'my_logger' logger, I'm not using root logger for this message
首先,我认为此消息甚至不应该显示在 Cloud Logging 中,因为我使用的是名为“my_logger”的命名记录器,并且云记录仅附加到根记录器,但无论如何...
上面的代码被导入到我的 app.py 中,它在应用引擎上引导一个 Flask 应用。
这是问题的截图:
这个人也有类似的问题:Duplicate log entries with Google Cloud Stackdriver logging of Python code on Kubernetes Engine
但我尝试了该主题中建议的所有解决方法,但也没有用。 我在这里缺少什么吗?提前致谢。
【问题讨论】:
-
如果您将处理程序添加到子记录器,消息仍会向上发送到根记录器并再次处理,除非您将子记录器的
propagate属性设置为False。 -
嗨,已经尝试过了,设置传播 = False 在本地工作,但不知何故,当部署到应用引擎时它不起作用,仍然重复记录。重复的记录是由同一个记录器发出的(可以通过查看 jsonPayload/python_logger 属性来确认)
-
确保
client.setup_logging()只被调用一次。每次调用它都会添加一个新的处理程序。这发生在我身上一次,但如果没有更多上下文,我不能说这是否与您遇到的问题相同。 -
根据官方 Google Cloud Platform documentation Cloud Logging 会自动为 App Engine 启用。因此,您的重复日志可能是由 Cloud Logging 和 Python 的 Cloud Logging 库引起的。您能否展开日志信息以确定两个日志条目是否具有相同的 insertID?
标签: python google-app-engine google-cloud-logging