自定义Flask应用的记录器名称

时间:2018-08-06 11:58:42

标签: python logging flask

我正在为app.logger配置处理程序和格式化程序。在输出中,记录器的名称始终为“ flask.app”。可以更改记录器的名称吗?

logger1 = RotatingFileHandler('app.log', maxBytes=4096)
logger1.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %message)s")
logger1.setFormatter(formatter)
app.logger.addHandler(logger1)
app.logger.setLevel(logging.DEBUG)

2 个答案:

答案 0 :(得分:1)

Flask 1.0将名称硬编码为flask.app,以简化配置。可能会在将来的版本中重新添加一些自定义项,请参见this issue

您可以继承并覆盖Flask.logger来更改其返回值。

from flask import Flask
from werkzeug.utils import cached_property

class LoggerFlask(Flask):
    @cached_property
    def logger(self):
        return super().logger.getChild(self.name)

现在记录器将为flask.app.my_app

您也可以不使用super().logger来返回自己的记录器,但是您会错过Flask应用的自动配置。在您的情况下,这应该不成问题,因为您正在执行自己的配置。

import logging
from flask import Flask
from flask.helpers import locked_cached_property

class LoggerFlask(Flask):
    @locked_cached_property
    def logger(self):
        return logging.getLogger(self.name)

答案 1 :(得分:0)

从Flask v1.1.0开始,记录器的名称将与app.name匹配。这是传递给Flask(import_name)的值。

from flask import Flask
app = Flask('CoolApp')