আমার স্ট্যান্ডএলোন মোডে (ব্যবহার করে app.run()
) চলছে ফ্লাস্ক সার্ভার । তবে কনসোলের মতো কোনও বার্তা চাই না like
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
আমি ভার্বোস মোডটি কীভাবে অক্ষম করব?
আমার স্ট্যান্ডএলোন মোডে (ব্যবহার করে app.run()
) চলছে ফ্লাস্ক সার্ভার । তবে কনসোলের মতো কোনও বার্তা চাই না like
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
আমি ভার্বোস মোডটি কীভাবে অক্ষম করব?
stderr
তবে তারা কেবলমাত্র আমার জন্য অপ্রাসঙ্গিক প্রতিটি এইচটিটিপি লেনদেন লগ করছে ...
উত্তর:
আপনি 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()
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
@ ড্রিউজ সমাধান বেশিরভাগ সময় কাজ করে তবে কিছু ক্ষেত্রে আমি এখনও ওয়ার্কজিগ লগ পেতে পারি। আপনি যদি সত্যিই তাদের কোনওটি দেখতে না চান তবে আমি আপনাকে এটির মতো অক্ষম করার পরামর্শ দিই।
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
?", আপনি জিজ্ঞাসা করুন। আমার ক্ষেত্রে কিছু অতিরিক্ত লগগুলি থেকে মুক্তি পাওয়ার দরকার ছিল। লগ_নামের মাধ্যমে কোন লগারে যুক্ত করতে হবে তা আমি খুঁজে পেতে সক্ষম হয়েছি:
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
পার্শ্ব দ্রষ্টব্য: যদি flaskapp.getLogger () বা এমন কিছু থাকে তবে এটি সংস্করণে আরও দৃust় ছিল It কোন ধারনা?
আরও কয়েকটি কী শব্দ: ফ্লাস্ক পরীক্ষা লগ স্টডআউট আউটপুট সরান
ধন্যবাদ:
অন্য কোনও উত্তরই আমার পক্ষে সঠিকভাবে কাজ করে নি, তবে আমি পিটারের মন্তব্যের ভিত্তিতে একটি সমাধান পেয়েছি । ফ্ল্যাস্ক স্পষ্টতই 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
এবং খালি ফাংশন সহ ক্লিক পদ্ধতিগুলিকে ওভাররাইড করার মধ্যে সমস্ত অ-ত্রুটিযুক্ত লগ আউটপুট প্রতিরোধ করা উচিত।
দেরীতে উত্তর কিন্তু আমি প্রতিটি এবং প্রতিটি কনসোল ম্যাসেজ (একটি 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/logging.html#logging-basic-tutorial
প্রথম পয়েন্ট: অফিশিয়াল ফ্লাস্ক ডকুমেন্টেশন অনুসারে, আপনার অ্যাপ্লিকেশন.আরুন () ব্যবহার করে ফ্লাস্ক অ্যাপ্লিকেশনটি চালানো উচিত নয়। সেরা সমাধানটি ইউউজি ব্যবহার করা হচ্ছে, যাতে আপনি "- ডিসাইজেবল-লগিং" কমান্ডটি ব্যবহার করে ডিফল্ট ফ্লাস্ক লগগুলি অক্ষম করতে পারেন you
উদাহরণ স্বরূপ:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app