我的项目使用这些python库:
requests==2.18.4
requests-toolbelt==0.8.0
并在main.py
中调用此方法requests_toolbelt.adapters.appengine.monkeypatch()
使用请求库时,应用引擎会在google云日志中记录错误消息:
AppEnginePlatformWarning:urllib3正在Google App上使用URLFetch 引擎沙箱而不是套接字。直接使用套接字而不是 URLFetch请参阅 https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html
AppEnginePlatformWarning:URLFetch不支持粒度超时 设置,恢复为完全或默认的URLFetch超时。
但这实际上只是警告,我的代码按预期工作。但是这个日志对我来说有问题,因为当我看到统计信息时,我无法知道日志中是否确实存在错误。这就是为什么我必须以某种方式将其记录为警告的原因。
这是一个stackoverflow答案。这个答案表明如果在GAE标准环境中显示此警告,则代码将正常工作。所以它真的警告我。如何记录它? AppEnginePlatformWarning: urllib3 is using URLFetch on Google App Engine sandbox instead of sockets
答案 0 :(得分:5)
您可以使用logging.captureWarnings
功能执行此操作。
来自docs:
此功能用于通过登录来关闭警告捕获 然后关闭。
如果捕获为True,则warnings模块发出警告 重定向到日志记录系统。具体来说,会发出警告 使用warnings.formatwarning()和结果字符串格式化 记录到名为'py.warnings'的记录器,其严重性为WARNING。
如果capture为False,则将警告重定向到日志记录系统 将停止,警告将重定向到其原始 目的地(即在captureWarnings(True)之前生效的目的地) 叫)。
在logging.captureWarnings(True)
中执行appengine_config.py
会将这些警告记录为警告。
另请参阅warnings模块的文档。
This question包含此代码片段,用于完全抑制消息:
# Use the App Engine Requests adapter. This makes sure that Requests uses
# URLFetch.
requests_toolbelt.adapters.appengine.monkeypatch()
# squelch warning
requests.packages.urllib3.disable_warnings(
requests.packages.urllib3.contrib.appengine.AppEnginePlatformWarning
)