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')