在我的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()))
答案 0 :(得分:1)
您在模块Class1
的全局范围内创建my_routes.py
的实例,因此构造函数在您导入该模块时运行,from my_routes import *
行在main.py
中。这是在配置日志记录处理程序之前,因此那时无处可记录。
解决方案很简单,将import语句移动到设置日志记录处理程序的代码块之下。