重复的日志 Flask - Google Cloud Logging

Posted

技术标签:

【中文标题】重复的日志 Flask - Google Cloud Logging【英文标题】:Duplicated logs Flask - Google Cloud Logging 【发布时间】:2020-07-07 19:53:48 【问题描述】:

我正在使用 GAE 在 Flask 中开发一个 Web 应用程序。 我的问题是:每次我的应用程序尝试记录时,我都会在日志文件中获得多个条目: log viewer . 我的 dbconnection 类只导入我创建的默认记录器类,并在需要时调用 unexpected_error_log() 进行写入。

我的记录器类:

import logging
from google.cloud import logging as cloudlogging

class LoggerDB:
    def __init__(self):
        log_client = cloudlogging.Client()
        log_handler = log_client.get_default_handler()
        self.cloud_logger = logging.getLogger("cloudLogger")
        self.cloud_logger.setLevel(logging.INFO)
        self.cloud_logger.addHandler(log_handler)

    def unexpected_error_log(self, name, error="Unhandled Exception"):
        self.cloud_logger.error("Unexpected Error on %s: %s", name, error)

执行时的代码:

def insertVenda(self, venda):
    try:
        query = "xxxxx"
        self.cursor.execute(query)
        self.connection.commit()
        return "Success"
    except Exception as error:
        self.logger.unexpected_error_log(__name__, error)
        self.connection.rollback()
        return "Error"

我怀疑 gunicorn/app 日志记录复制了我的日志,但我不知道如何处理这种情况。 有人遇到过同样的问题吗?

【问题讨论】:

显示生成日志消息的代码。 已编辑问题... 将日志导入 Stackdriver Logging 的代码似乎是正确的。我建议查看您的代码,看看是否还有其他可能导致这些日志的原因。 gunicorn 会不会复制我的日志?有没有办法从 gunicorn 关闭日志? 【参考方案1】:

我现在正在努力解决这个问题,我现在怀疑你是否包含这样的内容:

# Imports Python standard library logging
import logging

import google.cloud.logging

# Instantiates a client
client = google.cloud.logging.Client()

# Retrieves a Cloud Logging handler based on the environment
# you're running in and integrates the handler with the
# Python logging module. By default this captures all logs
# at INFO level and higher
client.get_default_handler()
client.setup_logging()

我的日志正常,但有多个重复项。 如果我省略,我只会将单个标准输出打印语句转到堆栈驱动程序日志。

【讨论】:

问题是重复的日志,你的回答没有解决。

以上是关于重复的日志 Flask - Google Cloud Logging的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google App Engine 时无法导入 Flask

Flask Urls中用于路由的问号[重复]

Ajax 发布到 Flask - json [重复]

在 Kubernetes Engine 上使用 Google Cloud Stackdriver 记录 Python 代码的重复日志条目

python 日志模块再熟悉

使用py 和flask 实现的日志文件实时显示到网页的功能 + 系统文件夹浏览下载功能。