如何禁用HTTP响应调试?

时间:2017-08-15 12:20:16

标签: python logging python-requests werkzeug

我的python代码当前在每个REST API调用结束时将以下行打印到日志中(它发回的响应的高级信息):

111.111.111.111 - - [15/Aug/2017:12:03:15 +0000] "POST /some_endpoint 
HTTP/1.1" 202 72 "-" "python-requests/2.2.1 CPython/3.4.3 Linux/3.13.0-83-generic"

通过其他搜索,我已经看到了如何摆脱它的以下建议:

1)logging.getLogger('werkzeug').setLevel(logging.ERROR)

2)logging.getLogger('werkzeug').disabled = True

3)与上述相同,但requests代替werkzeug

这些没有效果。提供的另一个解决方案是使用完全不同的流进行日志记录,但这不能满足我的需求。

这显然是通过一个单独的机制记录而不是我的其他日志,因为格式不同,但我似乎无法确定罪魁祸首。

1 个答案:

答案 0 :(得分:1)

通常,您可以在任何库中找到logging实例并调整日志记录级别

您可以通过logging

访问werkzeug._internal实用程序
from werkzeug._internal import _logger

然后我将根记录器调整为logging.CRITICAL50

_logger.setLevel(50)

这意味着Werkzeug只会打印CRITICAL(或更高)输出

然后,您可以根据需要调整_logger级别

直接示例

这适用于您的示例,方法是在Werkzeug github页面中搜索import logging命令。这是我在werkzeug._internal找到的,然后我们可以做到

In [2]: from werkzeug.wrappers import Request, Response
   ...:
   ...: @Request.application
   ...: def application(request):
   ...:     return Response('Hello World!')
   ...:

In [3]: from werkzeug.serving import run_simple

In [4]: run_simple('localhost', 4000, application)
 * Running on http://localhost:4000/ (Press CTRL+C to quit)

In [5]: from werkzeug import _internal

In [6]: _internal._log('info', 'Setting logger level to Critical!')  # see below why this is required
Out[6]: 'Setting logger level to Critical!'

In [7]: _internal._logger.setLevel(50)

In [7]: run_simple('localhost', 4000, application)

如果发生_logger is None,则会发生这种情况,因为没有调用Werkzeug日志记录实例。有关更清晰的信息,请参阅_internal中的line 75

In [1]: from werkzeug import _internal

In [2]: type(_internal._logger)
Out[2]: NoneType

In [3]: _internal._log('info', 'removing logger!')
removing logger!

In [4]: type(_internal._logger)
Out[4]: logging.Logger