首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数框架和GoogleCloudLoggingPythonv3.0.0时我可以查看日志消息吗?

使用函数框架和GoogleCloudLoggingPythonv3.0.0时我可以查看日志消息吗?
EN

Stack Overflow用户
提问于 2022-03-06 18:22:45
回答 1查看 472关注 0票数 3

我正在编写一个新的云功能,并使用在https://cloud.google.com/blog/products/devops-sre/google-cloud-logging-python-client-library-v3-0-0-release上宣布的新Google日志库。

在将代码推到GCP之前,我还使用函数框架在本地调试代码。使用Python设置和调用云函数在这里特别有用。

我遇到的问题是,当将这两件事情结合使用时,我无法在IDE中看到日志输出,只能看到print语句。下面是我的代码示例:

代码语言:javascript
复制
from flask import Request
from google.cloud import bigquery
from datetime import datetime
import google.cloud.logging
import logging

log_client = google.cloud.logging.Client()
log_client.setup_logging()

def main(request) -> str:
    #
    # do stuff to setup a bigquery job
    #
    bq_client = bigquery.Client()

    job_config = bigquery.QueryJobConfig(labels={"key": "value"})
    nowstr = datetime.now().strftime("%Y%m%d%H%M%S%f")
    job_id = f"qwerty-{nowstr}"

    query_job = bq_client.query(
        query=export_script, job_config=job_config, job_id=job_id
    )
    print("Started job: {}".format(query_job.job_id))
    query_job.result()  # Waits for job to complete.
    logging.info(f"job_id={query_job.job_id}")
    logging.info(f"total_bytes_billed={query_job.total_bytes_billed}")

    return f"{query_job.job_id} {query_job.state} {query_job.error_result}"

然而,当我使用云函数运行函数时,我看到的唯一输出是在我的终端中

开始工作: qwerty-20220306181905424093

如您所见,对print(...)的调用已输出到我的终端,但对logging.info(...)的调用没有。在使用函数框架在本地运行时,是否有一种方法可以将日志输出重定向到我的终端,但在GCP中函数作为实际云函数运行时不影响日志记录?

EN

Stack Overflow用户

回答已采纳

发布于 2022-03-06 21:18:00

由于@加密傻瓜的建议,我发现我需要更改默认的日志记录级别,以便将输出显示在终端中。

代码语言:javascript
复制
from flask import Request
from google.cloud import bigquery
from datetime import datetime
import google.cloud.logging
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def main(request) -> str:
    #
    # do stuff to setup a bigquery job
    #
    bq_client = bigquery.Client()

    job_config = bigquery.QueryJobConfig(labels={"key": "value"})
    nowstr = datetime.now().strftime("%Y%m%d%H%M%S%f")
    job_id = f"qwerty-{nowstr}"

    query_job = bq_client.query(
        query=export_script, job_config=job_config, job_id=job_id
    )
    print("Started job: {}".format(query_job.job_id))
    query_job.result()  # Waits for job to complete.
    logging.info(f"job_id={query_job.job_id}")
    logging.info(f"total_bytes_billed={query_job.total_bytes_billed}")

    return f"{query_job.job_id} {query_job.state} {query_job.error_result}"

开始工作: qwerty-20220306211233889260 信息:root:job_id=qwerty-20220306211233889260 INFO:root:total_bytes_billed=31457280

但是,当使用google.cloud.logging时,我仍然不能在终端中输出任何输出

代码语言:javascript
复制
from flask import Request
from google.cloud import bigquery
from datetime import datetime
import google.cloud.logging
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)
log_client = google.cloud.logging.Client()
log_client.setup_logging()

def main(request) -> str:
    #
    # do stuff to setup a bigquery job
    #
    bq_client = bigquery.Client()

    job_config = bigquery.QueryJobConfig(labels={"key": "value"})
    nowstr = datetime.now().strftime("%Y%m%d%H%M%S%f")
    job_id = f"qwerty-{nowstr}"

    query_job = bq_client.query(
        query=export_script, job_config=job_config, job_id=job_id
    )
    print("Started job: {}".format(query_job.job_id))
    query_job.result()  # Waits for job to complete.
    logging.info(f"job_id={query_job.job_id}")
    logging.info(f"total_bytes_billed={query_job.total_bytes_billed}")

    return f"{query_job.job_id} {query_job.state} {query_job.error_result}"

开始工作: qwerty-20220306211718088936

我想我会就此再开一条线。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71373068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档