Saya memiliki server Flask yang berjalan dalam mode standalone (menggunakan app.run()
). Tapi, saya tidak ingin ada pesan di konsol, seperti
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
Bagaimana cara menonaktifkan mode verbose?
stderr
tetapi mereka hanya mencatat setiap transaksi HTTP, agak tidak relevan bagi saya ...Jawaban:
Anda dapat mengatur level logger Werkzeug ke ERROR, dalam hal ini hanya kesalahan yang dicatat:
import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR)
Berikut adalah contoh yang berfungsi penuh diuji pada OSX, Python 2.7.5, Flask 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()
sumber
click.secho
Solusi ini memberi Anda cara untuk mendapatkan cetakan Anda sendiri dan jejak tumpukan tetapi tanpa log tingkat informasi dari flask suck as
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
sumber
Solusi @Drewes bekerja sebagian besar waktu, tetapi dalam beberapa kasus, saya masih cenderung mendapatkan log werkzeug. Jika Anda benar-benar tidak ingin melihat salah satu dari mereka, saya sarankan Anda menonaktifkannya seperti itu.
from flask import Flask import logging app = Flask(__name__) log = logging.getLogger('werkzeug') log.disabled = True app.logger.disabled = True
Bagi saya gagal saat
abort(500)
dibesarkan.sumber
Jika Anda menggunakan server WSGI, setel log ke Tidak Ada
gevent_server = gevent.pywsgi.WSGIServer(("0.0.0.0", 8080), app,log = None)
sumber
Alasan lain Anda mungkin ingin mengubah keluaran logging adalah untuk pengujian, dan mengarahkan log server ke file log.
Saya juga tidak bisa mendapatkan saran di atas untuk berfungsi, sepertinya logger disiapkan sebagai bagian dari permulaan aplikasi. Saya bisa membuatnya berfungsi dengan mengubah level log setelah memulai aplikasi:
... (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)
Sayangnya
* Running on localhost:9151
pemeriksaan kesehatan dan pertama masih dicetak ke standar, tetapi ketika menjalankan banyak pengujian, itu membersihkan output satu ton."Jadi kenapa
log_names
?", Anda bertanya. Dalam kasus saya, ada beberapa log tambahan yang perlu saya singkirkan. Saya dapat menemukan penebang mana yang akan ditambahkan ke log_names melalui:from flask import Flask app = Flask(__name__) import logging print(logging.Logger.manager.loggerDict)
Catatan tambahan: Akan lebih baik jika ada flaskapp.getLogger () atau sesuatu yang lebih kuat di semua versi. Ada ide?
Beberapa kata kunci lainnya: log uji flask menghapus keluaran stdout
terimakasih untuk:
sumber
Tidak ada jawaban lain yang berfungsi dengan benar untuk saya, tetapi saya menemukan solusi berdasarkan komentar Peter . Flask tampaknya tidak lagi digunakan
logging
untuk logging, dan telah beralih ke paket klik . Dengan menimpaclick.echo
danclick.secho
menghapus pesan startup Flask dariapp.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()
Antara menyetel tingkat pencatatan ke
ERROR
dan menimpa metode klik dengan fungsi kosong, semua keluaran log non-kesalahan harus dicegah.sumber
Untuk menekan
Serving Flask app ...
:os.environ['WERKZEUG_RUN_MAIN'] = 'true' app.run()
sumber
Jawaban terlambat tetapi saya menemukan cara untuk menekan SETIAP DAN SETIAP PESAN KONSOL (termasuk yang ditampilkan selama
abort(...)
kesalahan).import os import logging logging.getLogger('werkzeug').disabled = True os.environ['WERKZEUG_RUN_MAIN'] = 'true'
Ini pada dasarnya adalah kombinasi dari jawaban yang diberikan oleh Slava V dan Tom Wojcik
sumber
Cara brute force untuk melakukannya jika Anda benar-benar tidak ingin ada yang masuk ke konsol di samping pernyataan print () adalah dengan
logging.basicConfig(level=logging.FATAL)
. Ini akan menonaktifkan semua log yang berstatus fatal. Itu tidak akan menonaktifkan pencetakan tapi ya, hanya sebuah pikiran: /EDIT: Saya menyadari akan egois jika saya tidak memasang tautan ke dokumentasi yang saya gunakan :) https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
sumber
Poin pertama: Menurut dokumentasi resmi Flask, Anda sebaiknya tidak menjalankan aplikasi Flask menggunakan app.run (). Solusi terbaik adalah menggunakan uwsgi, jadi Anda dapat menonaktifkan log flask default menggunakan perintah "--disable-logging"
Sebagai contoh:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app
sumber