如何在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
显示应用程序日志消息和请求记录 但是,当我查看部署的相同代码的日志时,我只能看到记录的请求:
我用来生成应用程序日志消息的代码如下:
import logging
logger = logging.getLogger("someLogger")
logger.info("entering app.py")
但我也尝试使用logging.info(...)
直接使用相同的结果。
我已尝试在各种资源中找到答案但我空手而归,大多数都是指在本地开发时如何设置日志级别。
我猜我需要启用一些设置才能在Google Cloud Logs上查看应用程序日志。
我看过的资源:
答案 0 :(得分:2)
App引擎按请求对日志进行分组。您需要使用“新”GAE日志查看器中请求左侧的三角形/指针来扩展日志。
我个人更喜欢使用旧的GAE日志查看器,但我不确定它会持续多久:
https://appengine.google.com/logs?app_id=s~xxx
(此查看器显示请求+日志并允许日志扩展)
答案 1 :(得分: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