如何将AppEnginePlatformWarning记录为警告而不是错误

时间:2017-10-06 14:34:11

标签: python google-app-engine python-requests

我的项目使用这些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

1 个答案:

答案 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
)