无法在Google Cloud日志中查看应用程序日志

8

如何查看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-log

我用于生成应用程序日志消息的代码如下:

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

logger.info("entering app.py")

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

我已经在各种资源中尝试寻找答案,但都没有结果,大多数参考的是如何在本地开发时设置日志级别。
我猜想我需要启用某些设置才能在Google Cloud Logs中查看应用程序日志。

我查看过的资源:

2个回答

2

App Engine会根据请求将日志分组。您需要使用'new' GAE日志查看器中请求左侧的三角形/指针来展开日志。

个人更喜欢使用旧版GAE日志查看器,但我不确定它还能存在多久:

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

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


2
我尝试了你的建议,不幸的是这并没有帮助我,因为我正在寻找的应用程序日志消息在日志查看器中被简单地省略(某种方式被过滤掉)。 扩展我可以访问的日志条目并不能帮助我找到我正在寻找的缺失应用程序日志消息。 - Petrus K.
我遇到了类似的问题,有时它们被包含在内,但大多数情况下它们从有效载荷中丢失了。 - samaspin

1
一个将 Google Cloud 平台日志集成到 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接