これは、問題を再現するコピー貼り付けの例です。werkzeugでFlaskアプリケーションを実行しているときにログが機能しないのはなぜですか?
import logging
from flask import Flask
from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware
def app_builder(app_name, log_file):
app = Flask(app_name)
app.debug = True
handler = logging.FileHandler(log_file)
handler.setLevel(logging.DEBUG)
app.logger.addHandler(handler)
return app
def _simple(env, resp):
resp(b'200 OK', [(b'Content-Type', b'text/plain')])
return [b'root']
if __name__ == "__main__":
app = app_builder(app_name='app', log_file='app.log')
@app.route('/')
def index():
return '<a href="/app/error">click for error</a>'
@app.route('/error')
def error():
1/0
return 'error page'
app2 = app_builder(app_name='app2', log_file='app2.log')
@app2.route('/')
def index():
return 'you are getting responses from app2'
app.debug = True
app2.debug = True
application = DispatcherMiddleware(_simple, {
'/app': app,
'/app2': app2
})
run_simple(hostname='localhost',
port=5000,
application=application,
use_reloader=True,
use_debugger=True)
エラーショーアップがhttp://localhost:5000/app/error
に移動させるために、私は、スタックトレースがapp.log
ファイルに表示されない理由を知りたいです。私は、DispatcherMiddleware
またはrun_simple
が何らかの形でログに記録される前に例外をキャッチしていると仮定します。 app.run()
を使用してapp
インスタンスのみを実行すると、エラーログが正常に動作します。
あなたは、このような[PuDB](HTTPSなどのデバッガで実行してみました://pypi.python.org/pypi/pudb)?エラールートにブレークポイントをドロップし、コールに従って、エラーの発生場所を確認します。 –
ログに書き留めるように指示する必要があります。 'app.logger.debug(" My error ")' – iScrE4m
@ iScrE4mしかし、なぜそれをする必要があるのですか?werkzeugは例外をログに記録しません(app.run () ')? – John