Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

Global logging with flask

$
0
0

As of December 2016, Flask has a built-in logger that it instantiates for you. Unfortunately, this misses the errors and other log messages in other libraries that may also be valuable.

It would be nice to have a single logger, one that captures BOTH library AND app logs. For those that want a global logger, this may take a few concept to get right. You have to:

undo flask's logging set up your own logging set log levels, as the default may not suit you.

Combined, this ends up looking like:

import logging import sys from flask import Flask, current_app LOG = logging.getLogger("my_log") LOG2 = logging.getLogger(__name__ + ".toheunateh") app = Flask(__name__) @app.route("/") def route(): current_app.logger.info("flask logger: foo") LOG.info("log: foo") LOG2.info("log2: foo") return "hello!" # create your own custom handler and formatter. # you can also use logging.basicConfig() to get # the python default. out_hdlr = logging.StreamHandler(sys.stdout) fmt = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") out_hdlr.setFormatter(fmt) out_hdlr.setLevel(logging.INFO) # append to the global logger. logging.getLogger().addHandler(out_hdlr) logging.getLogger().setLevel(logging.INFO) # removing the handler and # re-adding propagation ensures that # the root handler gets the messages again. app.logger.handlers = [] app.logger.propagate = True app.run()

And you get the right messages. Voila!


Viewing all articles
Browse latest Browse all 9596

Trending Articles