मेरे पास एक फ्लास्क सर्वर है जो स्टैंडअलोन मोड (उपयोग app.run()
) में चल रहा है । लेकिन, मुझे कंसोल में कोई संदेश नहीं चाहिए, जैसे
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
मैं वर्बोज़ मोड को कैसे निष्क्रिय करूँ?
मेरे पास एक फ्लास्क सर्वर है जो स्टैंडअलोन मोड (उपयोग app.run()
) में चल रहा है । लेकिन, मुझे कंसोल में कोई संदेश नहीं चाहिए, जैसे
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
मैं वर्बोज़ मोड को कैसे निष्क्रिय करूँ?
stderr
लेकिन वे सिर्फ एक HTTP लेनदेन, मेरे लिए अप्रासंगिक लॉगिंग कर रहे हैं ...
जवाबों:
आप ERPOR को Werkzeug लकड़हारा का स्तर सेट कर सकते हैं, उस स्थिति में केवल त्रुटियाँ लॉग होती हैं:
import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
यहाँ OSX, पायथन 2.7.5, फ्लास्क 0.10.0 पर पूरी तरह से काम किया गया उदाहरण दिया गया है:
from flask import Flask
app = Flask(__name__)
import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
click.secho
यह समाधान आपको अपने स्वयं के प्रिंट और स्टैक के निशान प्राप्त करने का एक तरीका प्रदान करता है, लेकिन बिना सूचना स्तर लॉग के फ्लास्क चूसना के रूप में 127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200
from flask import Flask
import logging
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
@ ड्र्यू सॉल्यूशन ज्यादातर समय काम करता है, लेकिन कुछ मामलों में, मैं अभी भी werkzeug लॉग प्राप्त करता हूं। यदि आप वास्तव में उनमें से किसी को भी नहीं देखना चाहते हैं, तो मैं आपको सुझाव देता हूं कि आप इसे उसी तरह अक्षम करें।
from flask import Flask
import logging
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
app.logger.disabled = True
मेरे लिए यह तब विफल हो abort(500)
गया जब मुझे उठाया गया था।
एक और कारण जो आप लॉगिंग आउटपुट को बदलना चाहते हैं वह परीक्षण के लिए है, और सर्वर लॉग को लॉग फ़ाइल में रीडायरेक्ट करता है।
मुझे या तो काम करने के लिए ऊपर सुझाव नहीं मिला, ऐसा लगता है कि ऐप शुरू करने के हिस्से के रूप में लकड़हारा सेटअप है। मैं ऐप को शुरू करने के बाद लॉग स्तरों को बदलकर इसे काम करने में सक्षम था :
... (in setUpClass)
server = Thread(target=lambda: app.run(host=hostname, port=port, threaded=True))
server.daemon = True
server.start()
wait_for_boot(hostname, port) # curls a health check endpoint
log_names = ['werkzeug']
app_logs = map(lambda logname: logging.getLogger(logname), log_names)
file_handler = logging.FileHandler('log/app.test.log', 'w')
for app_log in app_logs:
for hdlr in app_log.handlers[:]: # remove all old handlers
app_log.removeHandler(hdlr)
app_log.addHandler(file_handler)
दुर्भाग्य से * Running on localhost:9151
और पहली स्वास्थ्य जांच अभी भी मानक से बाहर मुद्रित की जाती है, लेकिन बहुत सारे परीक्षण चलाने पर यह एक टन उत्पादन को साफ करता है।
"तो क्यों log_names
?", आप पूछते हैं। मेरे मामले में कुछ अतिरिक्त लॉग थे जिनसे मुझे छुटकारा पाने की आवश्यकता थी। मैं यह पता लगाने में सक्षम था कि कौन से लॉगर को log_names से जोड़ना है:
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
साइड नोट: यह अच्छा होगा अगर कोई फ्लास्कैप.गेटलॉगर () या ऐसा कुछ था, तो यह संस्करणों में अधिक मजबूत था। कोई विचार?
कुछ और महत्वपूर्ण शब्द: फ्लास्क टेस्ट लॉग स्टडआउट आउटपुट निकालते हैं
का शुक्र है:
अन्य उत्तरों में से किसी ने भी मेरे लिए सही ढंग से काम नहीं किया, लेकिन मुझे पीटर की टिप्पणी के आधार पर एक समाधान मिला । फ्लास्क जाहिर तौर पर logging
लॉगिंग के लिए उपयोग नहीं करता है, और क्लिक पैकेज पर स्विच किया गया है। ओवरराइड करके click.echo
और click.secho
मैंने फ्लास्क के स्टार्टअप संदेश को समाप्त कर दिया app.run()
।
import logging
import click
from flask import Flask
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
def secho(text, file=None, nl=None, err=None, color=None, **styles):
pass
def echo(text, file=None, nl=None, err=None, color=None, **styles):
pass
click.echo = echo
click.secho = secho
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
लॉगिंग स्तर को सेट करने ERROR
और खाली कार्यों के साथ क्लिक विधियों को ओवरराइड करने के बीच , सभी गैर-त्रुटि लॉग आउटपुट को रोका जाना चाहिए।
देर से जवाब लेकिन मुझे EACH AND EVERY CONSOLE MESSAGE (एक abort(...)
त्रुटि के दौरान प्रदर्शित किए गए सहित ) को दबाने का एक तरीका मिला ।
import os
import logging
logging.getLogger('werkzeug').disabled = True
os.environ['WERKZEUG_RUN_MAIN'] = 'true'
यह मूल रूप से स्लावा वी और टॉम वोजिक द्वारा दिए गए उत्तरों का एक संयोजन है
यदि आप वास्तव में प्रिंट () स्टेटमेंट के साथ कंसोल में लॉग इन करने के लिए कुछ भी नहीं चाहते हैं, तो यह करने के लिए एक क्रूर बल तरीका है logging.basicConfig(level=logging.FATAL)
। यह उन सभी लॉग को निष्क्रिय कर देगा जो घातक स्थिति में हैं। यह मुद्रण को अक्षम नहीं करेगा, लेकिन हाँ, बस एक विचार: /
संपादित करें: मुझे एहसास हुआ कि मेरे द्वारा उपयोग किए गए दस्तावेज़ का लिंक न देना मेरे लिए स्वार्थी होगा :) https://docs.python.org/3/howto/log.html#logging-basic-tutorial
पहला बिंदु: आधिकारिक फ्लास्क प्रलेखन के अनुसार, आपको app.run () का उपयोग करके फ्लास्क एप्लिकेशन नहीं चलाना चाहिए। सबसे अच्छा समाधान uwsgi का उपयोग कर रहा है, इसलिए आप कमांड का उपयोग करके डिफ़ॉल्ट फ्लास्क लॉग को अक्षम कर सकते हैं "
उदाहरण के लिए:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app