在我的自定义Flask扩展中记录Flask未打印的消息

时间:2017-08-19 19:06:39

标签: python-3.x logging flask flask-extensions

我在官方网站上的指南后写了一个小的Flask扩展。不幸的是,没有关于登录该指南的部分。

我的__init__.py的简化版本是:

class MyFlaskExtension(object):

    def __init__(self, app=None)
        self.app
        if app is not None:
            self.init_app(app)

        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.DEBUG)
        self.logger.debug('test')

这不起作用,我没有收到任何错误,但Flask没有打印我的调试消息。如果我用self.logger = self.app.logger替换我的记录器声明,它可以使用Flasks默认记录器。但是,我想从Flask单独处理配置和格式。

如何让Flask打印扩展程序的日志?

1 个答案:

答案 0 :(得分:0)

如果要使用自定义记录器(具有特定格式和日志级别),则应注册处理程序。这个示例可以帮助您app.py

import logging
from flask import Flask, current_app

app = Flask(__name__)


class MyFlaskExtension(object):

    def __init__(self):
        self.logger = logging.getLogger('my_flask_ext_logger')
        self.logger.setLevel(logging.DEBUG)
        # your custom handlers, formatters and filters here...
        handler = logging.StreamHandler()
        handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
        self.logger.addHandler(handler)

        self.logger.info('My Was initialized')

    def init_app(self, flask_app):
        if not hasattr(flask_app, 'extensions'):
            app.extensions = {}

        app.extensions['MyFlaskExtension'] = self

        app.config.setdefault('DEFAULT_PARAM_OF_YOUR_EXTENSION', None)
        # other params
        app.config.setdefault('ONE_MORE DEFAULT_PARAM...', 5)


@app.route('/')
def main():
    # check your logger
    my_extension_logger = current_app.extensions['MyFlaskExtension'].logger
    my_extension_logger.info('Route "/". This is message from My extension logger')

    return 'logger'

# init and register your extension
my_extension = MyFlaskExtension()
my_extension.init_app(app)

if __name__ == '__main__':
    app.run()

运行我们的应用程序。您将在控制台中看到下一个输出:

INFO:my_flask_ext_logger:My Was initialized
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

现在让我们打开http://127.0.0.1:5000/。您将看到来自记录器的消息:

INFO:my_flask_ext_logger:Route "/". This is message from My extension logger
127.0.0.1 - - [22/Aug/2017 16:28:53] "GET / HTTP/1.1" 200 -

希望这有帮助。