2014-12-06 88 views
0

在我的Flask服務器應用程序中,我想將我的路線拆分爲單獨的文件,因此我使用了Blueprint。但是這導致日誌在路由使用的構造函數中失敗。任何人都可以看到我可能做錯了,導致這一點?將藍圖添加到Flask似乎打破了日誌記錄

簡單的例子...

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

您在全球範圍內建立的Class1實例模塊my_routes.py,因此構造函數在導入該模塊時運行,from my_routes import *main.py。這是在您的日誌處理程序配置之前,所以無法登錄。

該解決方案很簡單,將您的導入語句移動到設置日誌處理程序的代碼塊的下面。

+0

謝謝你發現這個。 – spiderplant0 2014-12-06 22:08:50

相關問題