2013-12-08 10 views
7

के साथ फ्लास्क लॉगिंग मैं एक हेरोकू-तैयार फ्लास्क ऐप स्थापित करने की कोशिश कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि लॉगिंग कैसे चालू करें।फोरमैन

फोरमैन के बिना, मैं एक HelloWorld एप्लिकेशन Flask tutorial में वर्णित के रूप में बना सकते हैं:

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 

और stdout में प्रवेश किया है।

जब मैं 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

बोतल एक के लिए डिफ़ॉल्ट लॉगिंग विन्यास डीपीएस बनाम उत्पादन मोड में पीपीएस अलग है।

आपके पहले उदाहरण में आप डीबग मोड में हैं। इस मामले में फ्लास्क एक लॉगिंग हैंडलर को परिभाषित करता है जो सभी संदेशों को logging.DEBUG या उच्चतर stderr के साथ लॉग करता है।

दूसरा उदाहरण डीबग मोड में नहीं है। जब डीबग मोड सक्षम नहीं होता है फ्लास्क लॉगर ऑब्जेक्ट बनाता है लेकिन इसमें कोई हैंडलर नहीं जोड़ता है, इसलिए कुछ भी मुद्रित नहीं होता है।

लिए फोरमैन और Heroku आप लॉग stdout या stderr के लिए भेजा जा करने की जरूरत है, तो तुम सब करने की जरूरत है अपनी पसंद के प्रवेश स्तर के साथ एक StreamHandler जोड़ने है:, अगर आप आप पसंद करते हैं

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!' 

वैकल्पिक रूप से इस में से कोई भी कर सकता है और सिर्फ फोरमैन/Heroku नियंत्रित आवेदन के लिए डिबग मोड सक्षम है, हालांकि यह कुछ मैं एक उत्पादन ऐप्स के लिए सलाह देते हैं नहीं होगा:

from flask import Flask 
app = Flask(__name__) 
app.debug = True 
+0

@ Miguel- धन्यवाद, लेकिन यह केवल के लिए काम कर रहा है चेतावनी-स्तर लॉगिंग। डीबग-स्तरीय लॉगिंग अभी भी दिखाई नहीं दे रहा है। मैं फोरमैन के साथ डीबग मोड में ऐप कैसे चला सकता हूं? – Yarin

+0

@Yarin: मैंने कोड अपडेट किया है, मेरे पास हैंडलर में लॉगिंग स्तर सेट है, न कि पैरेंट लॉगर में। मैंने एक स्निपेट भी जोड़ा है जो आपको दिखाता है कि 'app.run() 'को कॉल किए बिना डीबग मोड कैसे सेट करें। – Miguel

+0

@ मिगुएल- परफेक्ट- एकल पंक्ति 'app.debug = True' वास्तव में मुझे बस चाहिए था। – Yarin

संबंधित मुद्दे