【snake】Section: 14 Logging, Middleware and Error Handling
Tracking Response Times for All Requests(gunicorn.pyに関して)
以下を実行すると
docker-compose up --build
1000で割れば秒表示になるのでマイクロセコンドで表示する。
今回の場合だと2.844秒かかったとわかる。
configフォルダーのgunicorn.pyで確認することができる。
gunicorn.orgのThe access log formatで確認できる。
access_log_formatがin %(D)sµsとなっている。
Dはrequest time in microsecondsである。
Configuring Log Levels(ログの設定方法)
4行目をWARNINGにすると、WARNINGの時のみログが出るようになる。
Using Flask's Logger(flaskロガーの使い方・)
app.pyでログの設定をする。
もしここを設定しなかったらflaskが自動的にdebagで設定される。
もしdebagがfalseの場合はwarningかそれ以上の警告しか出ないようになる。
次に、users/models.pyの60行目に以下を追記する。 また6行目でcurrent_appをインポートする。
from flask import current_app current_app.logger.debug('{0} has tried to login'.format(identity))
変なアドレスがログインしようとしたとログがでる。
4行目のDEBAGをINFOに変えると役割が違うのでログが出てこなくなる。
Integrating Google Analytics(GAを使えば何人来たかとか色々わかる)
設定はコピペするだけで十分である。
temaplate/layout/base.htmlを確認する。
35行目で config['ANALYTICS_GOOGLE_UA']としている。
configファイルで登録すれば、ここにハードコードしなくても
自動で読み取りを行ってくれるようになる。
instance/settings.pyに以下のようにかく
実際に確認する場合はコンテナを一度止めてから再起動する必要がある。
configではなくinstanceに登録する理由は、developmentモードでトラッキングされたくないから。
config['ANALYTICS_GOOGLE_UA']とすることでflask全体に飛ばしてくれるからconfig?
また、if分使うことでもしあればやれとしてくれる。
Fixing IP Addresses with Middleware
middlewareとはWGSIとFlaskの間にあるもの。 Flaskに情報が届く前にdetailを取得したり、addしたりheadersをremoveする。 ProxyFixとはmiddlewareでWerkzeugに含まれている。 nginx(エンジンエックス)とはproxyとして使える。
app.pyで127行目でmiddlewareが設定されている。
Werkzeug(ヴェルクツォイク)とは、PythonでWebアプリケーションを作るためのユーティリティライブラリ。ドイツ語で「工具」という意味の単語。Requestオブジェクトの支援ツール。 多分、こういうの表示してくれるやつ
クライアント1万台問題の解決策としてAppachではなくNginxを使うようになった。
Flaskはエンジンエックスをuserだと勘違いしてipadressを認識してみんな同じip adressいなってしまう。そこで、ProcyFixがIP adressをいい感じにミックスしてくれる。Flaskのrequest.remote_addrで本当のIP adressを取得する。セキュリティ面からいうと、エンジエックスのようなproxyを絶対に使った方がいい。
135行目でwsgi(ウイスキー)がproxyfixにわ達されている。 結果をapp.wsgi_appとしている。
Custom Error Pages 問題あったら自動でエラーページにする。
app.pyの73行目にerror_templates(app)ファンクションが登録されている。
そのファンクションは140行目に定義されている。
全システムにできるようにblueprintレベルではなく、
appレベルで使えるようにする。
カスタムエラー abort(500)とにするとhomepageを500エラーにすることができる。
Handling Exceptions in Production
74行目でexception_handler(app)ファンクションが登録されている。
これを設定することでNotifyを得ることができる。
メールの設定を行、185行目でログの内容を記載する。
3rdパーティーのライブラリーあるけど、Emailで十分である。
実際の動きを見てみる。
configフォルダーのsetting.pyのDEBUGをFalseにする。
8行目をわざと消す。
lcoalhost8000に接続するとエラーページになる。
メールを見てみるとエラー表記がされている。
global name dfinned not findが確認できる。