7

如何在 Google Cloud 上查看日志消息?:https ://console.cloud.google.com/logs

这是我在运行 dev_appserver.py (本地运行)时在终端中看到的内容:

INFO     2016-05-16 14:00:45,118 module.py:787] default: "GET /static/images/contact.png HTTP/1.1" 304 -
INFO     2016-05-16 14:00:45,128 module.py:787] default: "GET /static/images/email.png HTTP/1.1" 304 -
INFO     2016-05-16 14:00:45,136 module.py:787] default: "GET /static/images/phone.png HTTP/1.1" 304 -
INFO     2016-05-16 14:00:45,487 basehandler.py:19] entering basehandler.py
INFO     2016-05-16 14:00:45,516 module.py:787] default: "GET /static/images/logo-349x209.png HTTP/1.1" 304 -
INFO     2016-05-16 14:00:45,562 requesthandlers.py:26] entering requesthandlers.py
INFO     2016-05-16 14:00:45,563 app.py:28] entering app.py
INFO     2016-05-16 14:00:45,563 app.py:198] Using development database

显示应用程序日志消息和请求日志记录。
但是,当我查看部署的相同代码的日志时,我只能看到正在记录的请求:

gcloud-日志

我用来生成应用程序日志消息的代码类似于:

import logging
logger = logging.getLogger("someLogger")

logger.info("entering app.py")

但我也尝试过logging.info(...)直接使用,结果相同。

我尝试在各种资源中找到答案,但我空手而归,大多数是指在本地开发时如何设置日志级别。
我猜我需要启用一些设置才能在 Google Cloud Logs 上查看应用程序日志。

我看过的资源:

4

2 回答 2

2

App Engine 按请求对日志进行分组。您需要在“新”GAE 日志查看器中使用请求左侧的三角形/指针来展开日志。

就我个人而言,我更喜欢使用旧的 GAE 日志查看器,但我不确定它会持续多久:

https://appengine.google.com/logs?app_id=s~xxx

(此查看器显示请求 + 日志并允许日志扩展)

于 2016-05-16T23:06:56.213 回答
1

将 Google Cloud Platform 日志记录集成到 Python 代码中的一种简单方法是从logging.StreamHandler. 这样,日志级别也将与 Google Cloud Logging 的级别相匹配,使您能够根据严重性进行过滤。此解决方案也适用于 Cloud Run 容器。

您也可以将此处理程序添加到任何现有的记录器配置中,而无需更改当前的记录代码。

import json
import logging
import os
import sys
from logging import StreamHandler

from flask import request


class GoogleCloudHandler(StreamHandler):
    def __init__(self):
        StreamHandler.__init__(self)

    def emit(self, record):
        msg = self.format(record)
        # Get project_id from Cloud Run environment
        project = os.environ.get('GOOGLE_CLOUD_PROJECT')

        # Build structured log messages as an object.
        global_log_fields = {}
        trace_header = request.headers.get('X-Cloud-Trace-Context')

        if trace_header and project:
            trace = trace_header.split('/')
            global_log_fields['logging.googleapis.com/trace'] = (
                f"projects/{project}/traces/{trace[0]}")

        # Complete a structured log entry.
        entry = dict(severity=record.levelname, message=msg)
        print(json.dumps(entry))
        sys.stdout.flush()

配置和使用处理程序的一种方法可能是:

def get_logger():
    logger = logging.getLogger(__name__)

    if not logger.handlers:
        gcp_handler = GoogleCloudHandler()
        gcp_handler.setLevel(logging.DEBUG)

        gcp_formatter = logging.Formatter(
            '%(levelname)s %(asctime)s [%(filename)s:%(funcName)s:%(lineno)d] %(message)s')
        gcp_handler.setFormatter(gcp_formatter)
        logger.addHandler(gcp_handler)
    return logger
于 2020-11-12T16:08:42.090 回答