Flask uWSGIおよびnginxを使用したアプリケーションを実行しています。500エラーがありますが、トレースバックがブラウザーまたはログに表示されません。Flaskからトレースバックをログに記録するにはどうすればよいですか?
uwsgi --http-socket 127.0.0.1:9000 --wsgi-file /var/webapps/magicws/service.py --module service:app --uid www-data --gid www-data --logto /var/log/magicws/magicapp.log
UWSGIログには500ステータスコードのみが表示され、トレースバックは表示されません。 nginxログにも何もありません。
[pid: 18343|app: 0|req: 1/1] 127.0.0.1 () {34 vars in 642 bytes}
[Tue Sep 22 15:50:52 2015]
GET /getinfo?color=White => generated 291 bytes in 64 msecs (HTTP/1.0 500)
2 headers in 84 bytes (1 switches on core 0)
FLASK_ENV
環境変数をdevelopment
に設定して、開発モードで実行します。未処理のエラーでは、一般的な500エラーページではなく、ターミナルとブラウザにスタックトレースが表示されます。
export FLASK_ENV=development # use `set` on Windows
flask run
Flask 1.0の前は、代わりにFLASK_DEBUG=1
を使用してください。
まだapp.run
を使用している場合(Flask 0.11では推奨されなくなりました)、debug=True
を渡します。
if __name__ == '__main__':
app.run(debug=True)
本番環境では、アプリをデバッグモードで実行する必要はありません。代わりに、エラーをファイルに記録する必要があります。
Flaskは標準を使用しますPythonロギングライブラリはエラーをログに記録するように構成できます。Flaskのログメッセージをファイルに送信するには、以下を挿入します。
import logging
handler = logging.FileHandler('/path/to/app.log') # errors logged to this file
handler.setLevel(logging.ERROR) # only log errors and above
app.logger.addHandler(handler) # attach the handler to the app's logger
Python logging モジュールの詳細をご覧ください。特に、エラーがログに記録される場所を変更したり、レベルを変更してエラーだけでなく記録することもできます。
アプリをサービスとして実行するときに、FLASK_DEBUG=1
環境変数を設定できます。これは一時的に行うだけで、運用サーバーでデバッグモードを有効にすることはセキュリティ上の問題であることに注意してください。
アップスタート(Ubuntu 14.04のデフォルト)
# /etc/init/uwsgiapp.conf
env FLASK_DEBUG=1
script
// upstart exec section
end script
Systemd(Ubuntu 16.04、Archのデフォルト)
[Service]
Environment="FLASK_DEBUG=1"
# other parts
監督
[program:flask]
environment=FLASK_DEBUG=1
通常、ログは/var/log/
のどこかにあります。
代わりに Flask-Debug 拡張を使用できます。もちろん、これは本番環境では決して有効にすべきではありません。
from flask import Flask
from flask_debug import Debug
app = Flask(__name__)
Debug(app)
app.run(debug=True)
次に、 http:// localhost:5000/_debug に移動してログをプレビューします。
flask-appconfig> = 0.1 開発中の Flask-Debug の自動初期化をサポートしているため、独自のコード(したがって本番環境のデプロイメント)から完全に省略することができます。
コードでユーザーとグループの権限を確認する必要があります。 「top」コマンドで確認できます。