2017-05-08 110 views
0

我期待控制檯打印調試語句,如「服務器端口啓動...」,但是當我爲以下文件運行python app.py時,沒有任何打印輸出。我已經將我的應用程序設置爲調試模式。日誌不能在Flask中工作在Python 3中

import logging 

from flask import Flask 
from flask_env import MetaFlaskEnv 
from flask_restful import Resource, Api 
from flask_restful import reqparse 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from tornado.wsgi import WSGIContainer 


class Configuration(metaclass=MetaFlaskEnv): 
    """ 
    export PORT=80 
    """ 
    DEBUG = True 
    PORT = 5000 

LOGGER = logging.getLogger(__name__) 
LOGGER.setLevel(logging.DEBUG) 

app = Flask(__name__) 
app.config.from_object(Configuration) 
api = Api(app) 

@app.route('/') 
def hello_world(): 
    return 'Hello, World!' 

if __name__ == '__main__': 
    LOGGER.debug("server starting on port :" + str(app.config["PORT"])) 
    HTTP_SERVER = HTTPServer(WSGIContainer(app)) 
    HTTP_SERVER.listen(port=app.config["PORT"]) 
    IOLoop.instance().start() 

回答

1

嘗試設置日誌級別也對根記錄:

logging.getLogger().setLevel(logging.DEBUG) 

或明確地重定向輸出使用的處理程序到標準輸出:

import sys 
import logging 

root = logging.getLogger() 
handler = logging.StreamHandler(sys.stdout)) 
root.addHandler(handler) 
+0

這不行。 – user1187968

+0

編輯我的回答 –

+0

這對我有效。 – nubela

0

您可以:

  1. 創建處理程序LOGGER
  2. 調用logging.basicConfig()

第一個選項是非常簡單

handler = logging.StreamHandler() 
LOGGER.addHandler(handler) 

第二個需要澄清

logging.basicConfig() 
LOGGER = logging.getLogger(__name__) 
LOGGER.setLevel(logging.DEBUG) 

因爲我們還沒有提供處理程序,您的記錄器將在父記錄中查找處理程序r等等......情況是 - 沒有默認的處理程序開箱即用。您必須提供一些或設置爲basicConfig的默認呼叫。請注意,模塊級別的便利功能(logging.info,logging.debug,logging.error,...)已經得到了這樣的初始化,並且如果沒有處理程序,它們將在內部調用basicConfig