向Flask添加蓝图似乎打破了日志记录

时间:2014-12-06 19:42:45

标签: python-2.7 flask

在我的Flask服务器应用程序中,我想将我的路由拆分为单独的文件,因此我使用了Blueprint。但是,这会导致日志记录在路由使用的构造函数中失败。任何人都可以看到我可能做错了导致这个吗?

简化示例......

main.py ...

#!/usr/bin/python
import logging
import logging.handlers
from flask import Flask, Blueprint

from my_routes import *

logger = logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler("flask.log",
    maxBytes=3000000, backupCount=2)
formatter = logging.Formatter(
    '[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logging.getLogger().addHandler(logging.StreamHandler())

logging.debug("started app")

app = Flask(__name__)
app.register_blueprint(api_v1_0)

if __name__ == '__main__':
    logging.info("Starting server")
    app.run(host="0.0.0.0", port=9000, debug=True)

my_routes.py ...

import logging
import logging.handlers
from flask import Flask, Blueprint

class Class1():
    def __init__(self):
        logging.debug("Class1.__init__()")   # This statement does not get logged
        self.prop1=11
    def method1(self):
        logging.debug("Class1.method1()")
        return self.prop1

obj1 = Class1()

api_v1_0 = Blueprint('api_v1_0', __name__)

@api_v1_0.route("/route1", methods=["GET"])
def route1():
    logging.debug("route1()")
    return(str(obj1.method1()))

1 个答案:

答案 0 :(得分:1)

您在模块Class1的全局范围内创建my_routes.py的实例,因此构造函数在您导入该模块时运行,from my_routes import *行在main.py中。这是在配置日志记录处理程序之前,因此那时无处可记录。

解决方案很简单,将import语句移动到设置日志记录处理程序的代码块之下。