将Flask日志从INFO更改为DEBUG

2024-04-18 17:47:44 发布

您现在位置:Python中文网/ 问答频道 /正文

默认情况下,Flask将使用INFO标记直接记录GET和POST请求等内容。在实现自定义记录器时,这些日志将被发布到同一个记录器中,并使我的信息层混乱。有没有办法把它们降级到另一层,比如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)

Tags: 标记debuginfo信息formatflask内容get
3条回答

万一有人来这里

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

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

不使用打印,使用记录器

我不确定如何降低请求的日志级别(通常在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)

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

Is the specified record to be logged? Returns zero for no, nonzero for yes. If deemed appropriate, the record may be modified in-place by this method.

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

相关问题 更多 >