ফ্লাস্ক সার্ভারে কনসোল বার্তা অক্ষম করুন


90

আমার স্ট্যান্ডএলোন মোডে (ব্যবহার করে app.run()) চলছে ফ্লাস্ক সার্ভার । তবে কনসোলের মতো কোনও বার্তা চাই না like

127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...

আমি ভার্বোস মোডটি কীভাবে অক্ষম করব?


সুতরাং এখন আপনার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা থ্রেডগুলি লাথি মারছে (যা তাদের ডিবাগ করা যথেষ্ট কঠিন) এবং এখন আপনি তার উপরে লগিং দমন করতে চলেছেন ? Eshশ্বর, আমি যা করব তার বিপরীতে শোনাচ্ছে .. আপনার লগিং যত বেশি ভাল হবে (স্পষ্টতই এটি প্রাসঙ্গিক হিসাবে দীর্ঘ;))।
ডেমিয়ান ব্রেচেট

6
@ ডেমিয়ানব্রেচ্ট বিষয়টি হ'ল লগগুলি প্রেরণ করা হয় stderrতবে তারা কেবলমাত্র আমার জন্য অপ্রাসঙ্গিক প্রতিটি এইচটিটিপি লেনদেন লগ করছে ...
এটোজটোয়া

উত্তর:


131

আপনি Werkzeug লগারের স্তরটিকে ERROR এ সেট করতে পারেন, সেক্ষেত্রে কেবল ত্রুটিগুলি লগ করা থাকে:

import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)

ওএসএক্স, পাইথন ২.7.৫, ফ্লাস্ক ০.০০.০ এ পরীক্ষিত একটি সম্পূর্ণ কার্যকারী উদাহরণ এখানে রয়েছে:

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()

9
এটি এইচটিটিপি লগগুলি স্ট্যাডারে যাওয়া বন্ধ করবে বলে মনে হয় না; এটি "শুরুর" বার্তাটি থামিয়ে দেয় (এতে স্পষ্টভাবে "ওয়ার্কজেগ" লগ ফর্ম্যাটে মডিউলটির নাম রয়েছে। "
আরএসবি

4
আমার জন্য কাজ কর. অনুরোধ ডিবাগ বার্তা দমন করা হয়। পাইথন 3.5.3.2, ফ্লাস্ক 0.12 এবং ওয়ার্কজেগ 0.11.11 ব্যবহার করছেন
জ্যাকলি ইমারডেউর

4
পাইথন 3.6, ফ্লাস্ক 0.12 এবং ওয়ার্কজেগ 0.11.15 ব্যবহার করেও কাজ করে।
ভালেন্তিন

8
দুর্ভাগ্যক্রমে ফ্ল্যাস্ক ব্যবহারের ফলে আর পুরোপুরি কাজ করে নাclick.secho
পিটার

4
লগিংয়ের স্তর পরিবর্তন করা কেবলমাত্র একটি বিশেষ অনুরোধ লগ করা এড়াতে সমাধান হওয়া উচিত নয়।
জিন্ট

11

এই সমাধানটি আপনাকে আপনার নিজের প্রিন্ট এবং স্ট্যাক ট্রেসগুলি পাওয়ার একটি উপায় প্রদান করে তবে ফ্লাস্ক থেকে স্তন্যপান স্তরের তথ্য স্তরের লগ ছাড়াই 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

স্থানীয়ভাবে আমার সার্ভারটি চালানোর সময় এটি কাজ করে তবে আশ্চর্যজনকভাবে হিরোকুতে এটি হয় না।
গ্যারেট

10

@ ড্রিউজ সমাধান বেশিরভাগ সময় কাজ করে তবে কিছু ক্ষেত্রে আমি এখনও ওয়ার্কজিগ লগ পেতে পারি। আপনি যদি সত্যিই তাদের কোনওটি দেখতে না চান তবে আমি আপনাকে এটির মতো অক্ষম করার পরামর্শ দিই।

from flask import Flask
import logging

app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
app.logger.disabled = True

আমার জন্য যখন abort(500)এটি উত্থাপিত হয়েছিল ব্যর্থ হয়েছিল।


8

আপনি যদি ডাব্লুএসজিআই সার্ভার ব্যবহার করছেন তবে দয়া করে লগ-এ কোনওটি সেট করুন না

gevent_server = gevent.pywsgi.WSGIServer(("0.0.0.0", 8080), app,log = None)

এটিই একমাত্র সমাধান যা আমার পক্ষে কাজ করেছিল এবং আমি ডাব্লুএসজিআইভারের সাথে ফ্লাস্ক ব্যবহার করি
উডি

7

আপনি লগিং আউটপুট পরিবর্তন করতে চাইতে পারেন এর অন্য কারণটি হচ্ছে পরীক্ষার জন্য এবং সার্ভার লগগুলিকে একটি লগ ফাইলে পুনর্নির্দেশ করতে।

আমি কাজ করার জন্য উপরের পরামর্শটি পেতে পারি না, দেখে মনে হচ্ছে অ্যাপ্লিকেশন শুরু হওয়ার অংশ হিসাবে লগারগুলি সেটআপ হয়ে গেছে। আমি অ্যাপ্লিকেশন শুরু করার পরে লগের স্তরগুলি পরিবর্তন করে এটি কাজ করতে সক্ষম হয়েছি :

... (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?", আপনি জিজ্ঞাসা করুন। আমার ক্ষেত্রে কিছু অতিরিক্ত লগগুলি থেকে মুক্তি পাওয়ার দরকার ছিল। লগ_নামের মাধ্যমে কোন লগারে যুক্ত করতে হবে তা আমি খুঁজে পেতে সক্ষম হয়েছি:

from flask import Flask
app = Flask(__name__)

import logging
print(logging.Logger.manager.loggerDict)

পার্শ্ব দ্রষ্টব্য: যদি flaskapp.getLogger () বা এমন কিছু থাকে তবে এটি সংস্করণে আরও দৃust় ছিল It কোন ধারনা?

আরও কয়েকটি কী শব্দ: ফ্লাস্ক পরীক্ষা লগ স্টডআউট আউটপুট সরান

ধন্যবাদ:


7

অন্য কোনও উত্তরই আমার পক্ষে সঠিকভাবে কাজ করে নি, তবে আমি পিটারের মন্তব্যের ভিত্তিতে একটি সমাধান পেয়েছি । ফ্ল্যাস্ক স্পষ্টতই 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এবং খালি ফাংশন সহ ক্লিক পদ্ধতিগুলিকে ওভাররাইড করার মধ্যে সমস্ত অ-ত্রুটিযুক্ত লগ আউটপুট প্রতিরোধ করা উচিত।


6

দমন করতে Serving Flask app ...:

os.environ['WERKZEUG_RUN_MAIN'] = 'true'
app.run()

4
এটি আমার জন্য কাজ করে, ফ্লাস্ক অ্যাপ্লিকেশন পরীক্ষা করার সময় আমি এটি ব্যবহার করতাম (নাক 2 ব্যবহার করে) এটি টার্মিনালের বিশৃঙ্খলা দূর করে। ধন্যবাদ
সিপিকে

6

দেরীতে উত্তর কিন্তু আমি প্রতিটি এবং প্রতিটি কনসোল ম্যাসেজ (একটি abort(...)ত্রুটির সময় প্রদর্শিত হওয়া সহ ) দমন করার একটি উপায় খুঁজে পেয়েছি ।

import os
import logging

logging.getLogger('werkzeug').disabled = True
os.environ['WERKZEUG_RUN_MAIN'] = 'true'

এটি মূলত স্লাভা ভি এবং টম ওয়াজিকের দেওয়া উত্তরগুলির সংমিশ্রণ


-1

আপনি যদি সত্যিই মুদ্রণ () বিবৃতিগুলির পাশে কনসোলে লগইন করতে চান না তবে এটি করার একটি নিষ্ঠুর বলের উপায় logging.basicConfig(level=logging.FATAL)। এটি মারাত্মক অধীনে স্থিতিযুক্ত সমস্ত লগ অক্ষম করবে। এটি মুদ্রণ অক্ষম করবে না তবে হ্যাঁ, কেবল একটি চিন্তাভাবনা: /

সম্পাদনা করুন: আমি বুঝতে পেরেছি এটা আমার স্বার্থপর ডকুমেন্টেশন আমি ব্যবহার করা কোন লিঙ্ক রাখা হবে না :) https://docs.python.org/3/howto/logging.html#logging-basic-tutorial


-3

প্রথম পয়েন্ট: অফিশিয়াল ফ্লাস্ক ডকুমেন্টেশন অনুসারে, আপনার অ্যাপ্লিকেশন.আরুন () ব্যবহার করে ফ্লাস্ক অ্যাপ্লিকেশনটি চালানো উচিত নয়। সেরা সমাধানটি ইউউজি ব্যবহার করা হচ্ছে, যাতে আপনি "- ডিসাইজেবল-লগিং" কমান্ডটি ব্যবহার করে ডিফল্ট ফ্লাস্ক লগগুলি অক্ষম করতে পারেন you

উদাহরণ স্বরূপ:

uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.