デバッグは、printでメッセージ表示する方法でやっていました。
ロギングを利用するともう少し本格的なログが出力できるみたい。
flaskのチュートリアル、クイックスタートの「logging」のところから進めていきます。
※今回、windowsで実行しておりますので、画面がいつもと違う点、ご了承ください。
今日も新しい知識がたくさんあり、若干ついていけていない感が否めないですが、負けません 笑
こんな人の役に立つかも
・Flaskを勉強したい人
・PythonでWebアプリケーション作成をしたい人
・flaskのログの挙動を確認したい人
チュートリアルのプログラム
「application.py」として以下のプログラムを作成して、チュートリアルのログを取ります。
pythonの仮想環境を立ち上げ、flaskのwebサーバーを立ち上げます。まずはいつも通り、FLASK_ENVをdevelopmentでWebサーバーを立ち上げて実行してみます。
Pythonの仮想環境、flaskのWebサーバー立ち上げについてはこちらをご参考ください。
from flask import Flask, flash, redirect, render_template, request, url_for
app = Flask(__name__)
@app.route('/')
def index():
#ここにチュートリアルのプログラムを埋め込みました。
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
print("Hello")
return "Index"
さりげなく、print(“Hello”)も入れておきました^^;
loggerを利用することで、時間や、ログのレベル(この例では、debug、warning、error)といったものを設定して出力が可能のようです。ログ、に必要な一式の設定があらかじめ行われているので、あえてprintを利用するより、こちらのログを利用すべきかな、とかんじました。(実際には、Pythonのlogingという機能を利用しているようで、もっと奥の深い世界が見えてきましたが、もう少し理解するのに勉強が必要そうです^^;)
ここで、一度ターミナル(又はコマンドプロンプト)で「Ctrl + C」を押してWebサーバーを停止します。「FLASK_ENV=production」と設定しなおして、Webサーバーのデバッグモードをオフにします。
そして、「flask run」で実行して「localhost:5000」にアクセスしてみます。この時に出力されるログとしては次のようになります。
debugで出力したものが消えているのがわかります。ログのレベルはどこまで開発段階で表示するのかどうか、というような区分分けで利用できそうです。
ログを取るという行為は普段は小さな開発しかやらないので、結構printでやってしまっていて、あまり意識したこともありませんでした。ログの取り方なども、今後学んでいく必要がありそうです。
WSGIについて調べる
クイックチュートリアルの「Hooking in WSGI Middleware」についていろいろと調べてみたのでをすが、このチュートリアルのみではなんだかまだ理解しきれていない感じです。まずはWSGIについて理解を深める必要がありそうです。
WSGIは、PythonのWebアプリケーションフレームワーク(flaskやDjango)とWebサーバー(Apacheなど)を接続するための標準的なインターフェースのようです。ウィスキーと読むようです。
WSGIで定められたルールで情報をやりとりすることで、Webアプリのフレームワークと、Webサーバーの対応づけの幅が広がるというようなことになるみたいですね。
Wikipediaには、「基本的な発想」の項目で、「アプリケーション側がWSGIに対応していれば、アプリケーションのコードに修正を加えることなく、WSGI対応サーバーを自由に選択することができる」とあります。
チュートリアルでの「Hooking in WSGI Middleware」では、このアプリケーション側をWSGIに対応させることができる、と捉えることができるのかな、と考えています。
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
実際にWebサーバーにデプロイしてみないとこの辺りは感覚が掴めないような気がしています。
どちらかというとラフロイグが好きです。