python - 自定义记录器的烧瓶应用程序格式化程序不起作用?
问题描述
我已阅读Flask - 如何存储日志和添加其他信息等。
但我不想extra={}
到处写代码。
我尝试使用 AppFormatter 自定义 FlaskApp 记录器,但它不起作用。这是代码示例:
import logging
from flask import session, Flask
from logging.handlers import RotatingFileHandler
class AppFormatter(logging.Formatter):
def format(self, record):
# fixme: AppFormatter.format is not called
s = super(AppFormatter, self).format(record)
user_id = session.get('user_id', '?')
username = session.get('fullanme', '??')
msg = '{} - {} - {}'.format(s, user_id, username)
return msg
LOG_FORMAT = '[%(asctime)s]%(module)s - %(funcName)s - %(message)s'
defaultFormat = AppFormatter(LOG_FORMAT)
def initLogger(logger, **kwargs):
file = kwargs.pop('file', 'debug.log')
fmt = kwargs.pop('format', defaultFormat)
level = kwargs.pop('level', logging.DEBUG)
maxBytes = kwargs.pop('maxBytes', 10 * 1024 * 1024)
backupCount = kwargs.pop('backupCount', 5)
hdl_file = RotatingFileHandler(file, maxBytes=maxBytes, backupCount=backupCount)
hdl_file.setLevel(level)
logger.addHandler(hdl_file)
for hdl in logger.handlers:
hdl.setFormatter(fmt)
app = Flask(__name__)
initLogger(app.logger)
app.run()
为什么在标准输出消息AppFormatter.format
时不调用app.logger
?
解决方案
试试这个
class AppFormatter(logging.Formatter):
def format(self, record):
user_id = session.get('user_id', '?')
username = session.get('fullanme', '??')
record.msg = '{} - {} - {}'.format(record.getMessage(), user_id, username)
return super(AppFormatter, self).format(record)
推荐阅读
- javascript - .then 中的 Mongoose 查询,尽管工作但仍收到警告和错误
- ios - 当 scrollToItemAtIndexPath 时 UICollectionView 滚动出视图
- html - Rails布局在动作之间没有改变
- python - 将 Qt5 升级到版本 5.6.2 会引发错误
- python - Pytorch - 在 softmax 层之后选择最佳概率
- flutter - 颤振'MySQL'未被识别为内部或外部命令
- php - 如何优化让我们加密以具有非常低的延迟
- mysql - 检查两个表中是否存在一行
- html - 当我将输入类型从文本更改为电子邮件时,字母重叠(仅使用 css 和 html 的表单)
- java - Android Studio ClassNotFoundException