Flask应用程序的自定义记录器格式化程序不工作?

2024-04-29 03:35:16 发布

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

我读过Flask - How to store logs and add additional information等等。你知道吗

但我不想在任何地方都编写类似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.formatapp.loggerstdout消息时不被调用?你知道吗


Tags: importappformatflasksessionloggingloggerpop
1条回答
网友
1楼 · 发布于 2024-04-29 03:35:16

试试这个

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)

相关问题 更多 >