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

Python 自定义Flask应用程序的记录器名称,python,logging,flask,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.set

我正在为
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)

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

您可以对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)

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

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