ロギング
Flaskは標準のPython logging
を使用します。 すべてのFlask関連のメッセージは、'flask'
ロガー名前空間に記録されます。 Flask.logger
は、'flask.app'
という名前のロガーを返し、アプリケーションのメッセージをログに記録するために使用できます。
基本設定
プロジェクトのロギングを構成する場合は、プログラムの起動時にできるだけ早く構成する必要があります。 ロギングを構成する前にapp.logger
にアクセスすると、デフォルトのハンドラーが追加されます。 可能であれば、アプリケーションオブジェクトを作成する前にロギングを設定してください。
この例では、dictConfig()
を使用して、すべてのログを除いて、Flaskのデフォルトと同様のログ構成を作成します。
デフォルト設定
自分でログを設定しない場合、FlaskはStreamHandler
をapp.logger
に自動的に追加します。 リクエスト中に、WSGIサーバーによって指定されたenviron['wsgi.errors']
(通常はsys.stderr
)のストリームに書き込みます。 リクエストの外部では、sys.stderr
にログを記録します。
デフォルトハンドラーの削除
app.logger
にアクセスした後にロギングを構成し、デフォルトのハンドラーを削除する必要がある場合は、それをインポートして削除できます。
管理者への電子メールエラー
本番用のリモートサーバーでアプリケーションを実行する場合、ログメッセージを頻繁に確認することはおそらくないでしょう。 WSGIサーバーはおそらくログメッセージをファイルに送信します。ユーザーが何か問題が発生したと言った場合にのみ、そのファイルをチェックします。
バグの発見と修正に積極的に取り組むために、エラー以上がログに記録されたときに電子メールを送信するようにlogging.handlers.SMTPHandler
を構成できます。
これには、同じサーバー上にSMTPサーバーが設定されている必要があります。 ハンドラーの構成の詳細については、Pythonのドキュメントを参照してください。
リクエスト情報の挿入
IPアドレスなど、リクエストに関する詳細情報を確認すると、一部のエラーのデバッグに役立つ場合があります。 logging.Formatter
をサブクラス化して、メッセージで使用できる独自のフィールドを挿入できます。 Flaskのデフォルトハンドラー、上記で定義されたメールハンドラー、またはその他のハンドラーのフォーマッターを変更できます。
その他のライブラリ
他のライブラリはロギングを広範囲に使用する可能性があり、それらのログからの関連メッセージも表示したい場合があります。 これを行う最も簡単な方法は、アプリロガーだけでなくルートロガーにハンドラーを追加することです。
プロジェクトによっては、ルートロガーだけを構成するのではなく、関心のある各ロガーを個別に構成する方が便利な場合があります。
Werkzeug
Werkzeugは、基本的な要求/応答情報を'werkzeug'
ロガーに記録します。 ルートロガーにハンドラーが構成されていない場合、WerkzeugはそのロガーにStreamHandler
を追加します。
フラスコ拡張
状況に応じて、拡張機能はapp.logger
または独自の名前付きロガーにログを記録することを選択する場合があります。 詳細については、各拡張機能のドキュメントを参照してください。