使用下面的代码我发送错误的电子邮件.我正在尝试在电子邮件中包含指向云控制台日志的链接,但请求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以确保它没有被编码或者其他东西,并且日志输出与链接中显示的内容相匹配
而不是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
.