2015-03-08 12 views
7

पर काम नहीं कर रहा है मैं फ्लास्क में संदेशों को लॉग इन करने और stdout दोनों में लॉग इन करने का प्रयास कर रहा हूं। मैं आधिकारिक बोतल डॉक्स पढ़ रहा है और इस के साथ आया था:फ्लास्क लॉगिंग सभी

from flask import Flask 
import logging 
from logging import Formatter, FileHandler 

app = Flask(__name__) 



@app.route('/') 
def hello_world(): 
    app.logger.debug('second test message...') 
    return 'Hello World!' 


if __name__ == '__main__': 
    #Setup the logger 
    file_handler = FileHandler('output.log') 
    handler = logging.StreamHandler() 
    file_handler.setLevel(logging.DEBUG) 
    handler.setLevel(logging.DEBUG) 
    file_handler.setFormatter(Formatter(
     '%(asctime)s %(levelname)s: %(message)s ' 
     '[in %(pathname)s:%(lineno)d]' 
    )) 
    handler.setFormatter(Formatter(
     '%(asctime)s %(levelname)s: %(message)s ' 
     '[in %(pathname)s:%(lineno)d]' 
    )) 
    app.logger.addHandler(handler) 
    app.logger.addHandler(file_handler) 
    app.logger.error('first test message...') 
    app.run() 

कई समस्याएं हैं:

  1. नहीं output.log फ़ाइल उत्पन्न होता है
  2. केवल पहले लॉगिंग संदेश काम करता है:

    app.logger.error ('परीक्षण ...')

और केवल stdout में ... दृश्य में से एक "/" stdout पर भी प्रिंट नहीं करता है ... क्या मैं कुछ गलत कर रहा हूं?

इस एप्लिकेशन को शुरू करने और जाने से उत्पादन होता है/करने के लिए:

2015-03-08 11:33:27,183 ERROR: first test message... [in /home/mosquito/python_projects/flask_tst/flask_tst.py:31] 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
127.0.0.1 - - [08/Mar/2015 11:33:43] "GET/HTTP/1.1" 200 - 
+0

क्या प्रक्रिया लॉग फ़ाइल में लिखने की अनुमति है? –

+0

हैलो क्लॉस, हां, प्रक्रिया में प्रोजेक्ट रूट फ़ोल्डर – AlejandroVK

+0

पर लिखने की अनुमति है, मुझे एक ही समस्या मिली है, भले ही loglevel जानकारी पर सेट हो, मुझे बस त्रुटि लॉग मिल गया है। और उत्पादन मोड में, फ्लास्क uwsgi द्वारा चलाया जाता है। – aGuegu

उत्तर

11

आपका (डीबग) लॉगिंग संदेशों बोतल द्वारा दबा दिया जा रहा है के रूप में आप डिबग मोड में नहीं चला रहे हैं। यदि आप निम्न ध्वज को सही पर सेट करते हैं, तो आपका कोड काम करेगा।

app.run(debug=True) 

संदेश अब अपेक्षित दिखाई देंगे।

BennyE$ python3 stackoverflow.py 
2015-03-08 12:04:04,650 ERROR: firs test message... [in stackoverflow.py:31] 
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 
* Restarting with stat 
2015-03-08 12:04:04,807 ERROR: firs test message... [in stackoverflow.py:31] 
-------------------------------------------------------------------------------- 
DEBUG in stackoverflow [stackoverflow.py:11]: 
second test message... 
-------------------------------------------------------------------------------- 
2015-03-08 12:04:13,789 DEBUG: second test message... [in stackoverflow.py:11] 
192.168.178.23 - - [08/Mar/2015 12:04:13] "GET/HTTP/1.1" 200 - 
-------------------------------------------------------------------------------- 
DEBUG in stackoverflow [stackoverflow.py:11]: 
second test message... 
-------------------------------------------------------------------------------- 
2015-03-08 12:04:14,899 DEBUG: second test message... [in stackoverflow.py:11] 
192.168.178.23 - - [08/Mar/2015 12:04:14] "GET/HTTP/1.1" 200 - 

यह जुड़े आउटपुट फ़ाइल में उत्पादन होता है:

BennyE$ cat output.log 
2015-03-08 11:58:22,226 ERROR: firs test message... [in stackoverflow.py:31] 
2015-03-08 12:04:04,650 ERROR: firs test message... [in stackoverflow.py:31] 
2015-03-08 12:04:04,807 ERROR: firs test message... [in stackoverflow.py:31] 
2015-03-08 12:04:13,789 DEBUG: second test message... [in stackoverflow.py:11] 
2015-03-08 12:04:14,899 DEBUG: second test message... [in stackoverflow.py:11] 
+0

काम करने लगता है, धन्यवाद बेनी! – AlejandroVK

+0

फ्लास्क से [डॉक्स] (http://flask.pocoo.org/docs/0.11/api/): "फ्लास्क किसी सामान्य त्रुटि पृष्ठ के साथ किसी भी सर्वर त्रुटि को दबाएगा जब तक यह डीबग मोड में न हो। जैसे कि इसे सक्षम करने के लिए कोड रीलोडिंग के बिना इंटरैक्टिव डीबगर, आपको डीबग = ट्रू और use_reloader = गलत के साथ रन() को आमंत्रित करना होगा। डीबग मोड में किए बिना True_debugger को True में सेट करना कोई अपवाद नहीं लेगा क्योंकि पकड़ने के लिए कोई भी नहीं होगा। " –

2

Thansk BennyE_HH, यह काम करता है।

लेकिन फ्लास्क ने ERROR स्तर लॉग संदेश को दबाया नहीं था, यहां तक ​​कि डीबग मोड अक्षम है (डिफ़ॉल्ट अक्षम है)।

मुझे लगता है कि हमें लॉग स्तर को नियंत्रित करने के लिए app.logger.setLevel(logging.DEBUG) पर कॉल करना चाहिए, यहां तक ​​कि डीबग मोड भी गलत है।