当前位置:  开发笔记 > 编程语言 > 正文

GAE REQUEST_LOG_ID env变量是错误的

如何解决《GAEREQUEST_LOG_IDenv变量是错误的》经验,为你挑选了1个好方法。

使用下面的代码我发送错误的电子邮件.我正在尝试在电子邮件中包含指向云控制台日志的链接,但请求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

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



1> Brendan Gogg..:

而不是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.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有