2013-12-08 2 views
7

헤로 우키 준비 플라스크 응용 프로그램을 설정하려고하는데 로깅을 켜는 방법을 알 수 없습니다.포먼과 플라스크 로깅

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run(debug=True) 
지금처럼 시작

:

python hello.py 

를 표준 출력에 기록이

Flask tutorial에 설명 된대로 포먼없이, 나는 helloworld를 응용 프로그램을 만들 수 있습니다.

나는 Heroku tutorial은, 그러나, 더 app.run 라인이 없다 따르 :

import os 
from flask import Flask 

app = Flask(__name__) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

그래서 내가 로깅 출력 디버그 모드에서 실행 및/또는 얻는 방법을 알아낼 수 없습니다 :

foreman start -p 5000 

Procfile :

web: gunicorn hello:app 

답변

11

플라스크 A에 대한 기본 로깅 구성 pps는 디버그 대 프로덕션 모드와 다릅니다.

첫 번째 예에서는 디버그 모드에 있습니다. 이 경우 Flask는 수준이 logging.DEBUG 이상인 모든 메시지를 stderr으로 기록하는 로깅 처리기를 정의합니다.

두 번째 예제는 디버그 모드가 아닙니다. 디버그 모드가 활성화되지 않은 경우 Flask는 로거 객체를 생성하지만 아무런 핸들러도 추가하지 않으므로 아무 것도 인쇄되지 않습니다.

당신은 그래서 당신이해야 할 모든 당신의 선택의 로깅 수준으로 StreamHandler를 추가하고, 로그 stdout 또는 stderr로 전송 될 필요가 감독하고 Heroku가 들어

: 당신은 당신이 원하는 경우,

import os 
from flask import Flask 

app = Flask(__name__) 

# log to stderr 
import logging 
from logging import StreamHandler 
file_handler = StreamHandler() 
app.logger.setLevel(logging.DEBUG) # set the desired logging level here 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

또는 이 중 아무 것도 할 수 없으며 Foreman/Heroku 제어 응용 프로그램에 대한 디버그 모드를 사용할 수 있지만 프로덕션 응용 프로그램의 경우에는 권장하지 않습니다.

+0

@ Miguel- 감사합니다. 경고 수준 로깅. 디버그 수준 로깅은 여전히 ​​나타나지 않습니다. Foreman과 함께 디버그 모드로 앱을 실행하려면 어떻게해야합니까? – Yarin

+0

@Yarin : 코드를 업데이트했습니다. 상위 로거가 아니라 처리기에서 로깅 수준을 설정했습니다. 또한 app.run()을 호출하지 않고 디버그 모드를 설정하는 방법을 보여주는 스 니펫을 추가했습니다. – Miguel

+0

@ Miguel- Perfect- 한 줄'app.debug = True'는 내가 필요한 모든 것이었다. – Yarin