GAE REQUEST_LOG_ID env变量是错误的

Mic*_*oel 11 python logging google-app-engine google-cloud-platform

使用下面的代码我发送错误的电子邮件.我正在尝试在电子邮件中包含指向云控制台日志的链接,但请求ID似乎在30%的时间内都是错误的.

如果我发现具有错误ID的请求,它总是几乎完美匹配,除了最后三个字符0(在Stackdriver控制台中)而不是101(从env变量返回),总是相同的替换 - 这是云控制台的错误或我是否尝试使用这些ID错误?

代码(精简版):

class ErrorAlertMiddleware(object):
    def process_response(self, request, response):
        if response.status_code == 500:
            logger.info(os.environ.get('REQUEST_LOG_ID'))

            msg = 'Link to logs: https://console.cloud.google.com/logs/viewer?' + '&'.join((
                'project=%s' % MY_APP_ID,
                'expandAll=true',
                'filters=request_id:%s' % os.environ.get('REQUEST_LOG_ID'),
                'resource=gae_app',
            ))

            # this is a utility func that simply sends email
            sendemail(ERROR_RECIPIENT, msg)
        return response
Run Code Online (Sandbox Code Playgroud)

注意我还记录了REQUEST_LOG_ID以确保它没有被编码或者其他东西,并且日志输出与链接中显示的内容相匹配

Bre*_*gin 5

而不是os.environ.get('REQUEST_LOG_ID'),使用request.environ.get('REQUEST_LOG_ID').

有可能os.environ['REQUEST_LOG_ID']在当前请求的开始和访问它的时间之间进行更改,但request.environ['REQUEST_LOG_ID']在初始化请求后不应更改.文档声明,如果一个请求ID大于另一个请求ID,则比其他请求ID晚.这意味着Stackdriver控制台中的requestID是在电子邮件链接中生成的.这让我觉得,沿线某处,os.environ['REQUEST_LOG_ID']正从更新'....000''....101'您访问之前,而在副本中request.environ['REQUEST_LOG_ID']应保持不变.

有关的更多信息request.environ,请查看中的源代码google.appengine.runtime.request_environment.py.我还没有真正找到相关的文档,但是这段代码让我相信它os.environ不像以前那样安全request.environ.