将Flask日志从INFO更改为DEBUG

时间:2015-05-06 19:08:05

标签: python logging flask

默认情况下,Flask会直接使用INFO标记记录GET和POST请求等内容。实现自定义记录器时,这些记录器将发布到同一记录器并使我的INFO层变得混乱。有没有办法将它们降级到另一层,比如DEBUG?

这是我使用的记录器:

# create logger
FORMAT = '%(asctime)s - %(module)s - %(levelname)s - Thread_name: %(threadName)s - %(message)s'
logging.basicConfig(
    format=FORMAT, datefmt='%m/%d/%Y %I:%M:%S %p',
    filename='wizard/logs/example.log', level=logging.DEBUG)

3 个答案:

答案 0 :(得分:12)

我不确定如何降级请求的日志级别(因为它通常在代码中明确说明,例如logging.info(" ..."))但是以下内容可以帮助你减少Flask本身的冗长。

Python允许您拥有多个记录器,每个记录器都有自己的日志级别。 如果您知道它所在的模块名称或它所注册的名称,您可以修改任何现有的记录器here

例如:

import logging
logger = logging.getLogger("mypackage.mymodule")  # or __name__ for current module
logger.setLevel(logging.ERROR)

以上任何python模块都可以完成。 Flask为每个应用提供一个记录器。您可以像这样得到它的引用:

import logging
from flask import Flask
app = Flask(__name__)  # or instead of __name__ provide the name of the module
app.logger.setLevel(logging.ERROR)

答案 1 :(得分:8)

实际上,有一种方法可以将日志记录从INFO降级到DEBUG(即使已经使用info()之类的调用发出了它。这可以使用连接到记录器的过滤器来实现。根据{{​​3}}过滤器检查:

  

是否要记录指定的记录?返回零表示否,非零表示   是。 如果认为合适,记录可以就地修改   这种方法。

因此,过滤器可能会更改日志记录的级别( levelno levelname 属性)。稍后,处理程序可以根据新级别允许或删除此记录。

答案 2 :(得分:2)

以防万一有人参观这个地方,

我也面临着同样的问题。似乎打印调用趋向于“不运行”。但是,如果您使用记录器而不是打印,您会发现代码实际上仍在运行。

不太清楚是什么原因,但是当我的代码的其他部分开始运行时,所有旧打印内容都会突然出现。

tldr;不使用打印,使用记录器