Bağımsız modda (kullanarak app.run()) çalışan bir Flask sunucum var . Ama konsolda herhangi bir mesaj istemiyorum.
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
Ayrıntılı modu nasıl devre dışı bırakırım?
Bağımsız modda (kullanarak app.run()) çalışan bir Flask sunucum var . Ama konsolda herhangi bir mesaj istemiyorum.
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
Ayrıntılı modu nasıl devre dışı bırakırım?
stderrama onlar sadece her HTTP işlemini günlüğe
Yanıtlar:
Werkzeug günlük kaydedicisinin düzeyini ERROR olarak ayarlayabilirsiniz, bu durumda yalnızca hatalar günlüğe kaydedilir:
import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
İşte OSX, Python 2.7.5, Flask 0.10.0 üzerinde test edilmiş tam olarak çalışan bir örnek:
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
Bu çözüm, kendi baskılarınızı ve yığın izlerinizi almanın bir yolunu sağlar, ancak flask suck'tan bilgi seviyesi günlükleri 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
@Drewes çözümü çoğu zaman işe yarıyor, ancak bazı durumlarda hala werkzeug günlükleri alma eğilimindeyim. Hiçbirini gerçekten görmek istemiyorsanız, bu şekilde devre dışı bırakmanızı öneririm.
from flask import Flask
import logging
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
app.logger.disabled = True
Benim için abort(500)büyüdüğünde başarısız oldu.
Diğer cevapların hiçbiri benim için doğru çalışmadı, ancak Peter'ın yorumuna dayanarak bir çözüm buldum . Görünüşe göre Flask artık logginggünlük kaydı için kullanmıyor ve tıklama paketine geçti. Geçersiz kılarak click.echove click.sechoFlask'ın başlangıç mesajını elimden aldım 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()
Günlük kaydı düzeyinin ayarlanması ve ERRORboş işlevlere sahip tıklama yöntemlerinin geçersiz kılınması arasında, tüm hatasız günlük çıktısı önlenmelidir.
Günlük çıktısını değiştirmek istemenizin bir başka nedeni de testler içindir ve sunucu günlüklerini bir günlük dosyasına yeniden yönlendirmektir.
Ben de çalışmak için yukarıdaki öneriyi alamadım, görünüşe göre kaydediciler uygulamanın başlamasının bir parçası olarak kuruluyor. Uygulamayı başlattıktan sonra günlük seviyelerini değiştirerek çalıştırmayı başardım :
... (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)
Ne yazık ki * Running on localhost:9151ve ilk sağlık kontrolü hala standart olarak yazdırılıyor, ancak çok sayıda test çalıştırıldığında çıktıyı bir ton temizliyor.
"Öyleyse neden log_names?" Diye soruyorsunuz. Benim durumumda, kurtulmam gereken bazı ekstra günlükler vardı. Log_names'e hangi kaydedicilerin ekleneceğini şu yolla bulabildim:
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
Yan not: Bir flaskapp.getLogger () veya başka bir şey olsaydı iyi olurdu, bu yüzden bu sürümler arasında daha sağlamdı. Herhangi bir fikir?
Birkaç anahtar kelime daha: şişe test günlüğü standart çıktıyı kaldır
sayesinde:
Geç cevap ama HER KONSOL MESAJINI (bir abort(...)hata sırasında görüntülenenler dahil) bastırmanın bir yolunu buldum .
import os
import logging
logging.getLogger('werkzeug').disabled = True
os.environ['WERKZEUG_RUN_MAIN'] = 'true'
Bu temelde Slava V ve Tom Wojcik tarafından verilen cevapların bir kombinasyonudur.
Konsolda print () ifadelerinin yanı sıra herhangi bir şeyin oturum açmasını gerçekten istemiyorsanız bunu yapmanın bir kaba kuvvet yolu yapmaktır logging.basicConfig(level=logging.FATAL). Bu, ölümcül durumda olan tüm günlükleri devre dışı bırakır. Yazdırmayı devre dışı bırakmaz ama evet, sadece bir düşünce: /
DÜZENLEME: Kullandığım belgelere bağlantı vermemenin bencilce olacağını fark ettim :) https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
İlk nokta: Resmi Flask belgelerine göre, app.run () kullanarak Flask uygulamasını çalıştırmamalısınız. En iyi çözüm uwsgi kullanmaktır, böylece "--disable-logging" komutunu kullanarak varsayılan flask günlüklerini devre dışı bırakabilirsiniz.
Örneğin:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app