Flaskにログ機能を実装する方法を解説する

スポンサーリンク

こんにちは、フレンズです。

この記事では、Flaskのロギングについて学びます。

スポンサーリンク

なぜログを取るのか?

ログを取ることは、コーディングに不可欠な要素です。

ログを取ることで、プログラムの流れをより深いレベルで理解することができます

したがって、コードの実行プロセス全体がより透明化されます。

どのIPアドレスがサイトにアクセスしているか、どのライブラリにアクセスしたかなどを追跡することができます

開発者は後でこのデータを使ってアプリケーションのパフォーマンスを分析し、スケールアウトのような必要なアクションを取ることができます。

ログを取るもう一つの重要な理由は、エラーをデバッグすることです。

イベントのログがあれば、エラーが発生した正確なステップを追跡することができ、開発者の時間を大幅に節約することができます

Flask ロギングの4つの部分

ロギング処理全体は4つのパートで構成されています。

Logger, handler, Formatter, Filter です。

それぞれについて見ていきましょう。

1. ロガー

ロギングシステムのエントリーレベルです。

アプリケーションからのイベントを記録する主要なインターフェイスを提供します。

Loggerによって記録されたこれらのイベントは、ログレコードと呼ばれます。

各レコードには、セキュリティレベルがあります。

4つのレベルがあります。

| ログレベル] [重要度
| — | — |
| DEBUG(デバッグ)|10
| INFO | 20
| 警告|30
| ERROR(エラー)| 40
| クリティカル|50

ロガーは、ログ レベルを持つように設定されています。

ロガーは、深刻度がそのログ レベルより高いログのみを記録します。

そして、ロガーはそれらをハンドラに渡します。

2. ハンドラ

ハンドラは、イベントやレコードを目的地に誘導するものです。

異なるハンドラを使用することで、イベントを異なるファイルにルーティングしたり、複数のハンドラを使用して、一部をファイルに、残りを別の場所に誘導することも可能です。

3. フォーマッタ

ログフォーマッターは、ログレコードのレイアウトを指定するために使用されます。

したがって、保存されるログの形式を指定することができます

4. フィルター

フィルタを使うと、ログレベル以外のパラメータに基づいてログレコードをフィルタリングすることができます

Flask のデフォルトのログシステムを利用する

Flask はアプリケーションの実行中に発生したイベントをトレースするために Python のロギングシステムそのものを使用します。

Python Logging にはデフォルトの Logger – BasicConfig があり、これを使用してメッセージを記録することができます

BasicConfigのシンタックスは以下の通りです。

import logging
 
logging.basicConfig(filename = 'filename.log', level=logging.<log_level>, format = '<message_structure>')

ログは.logという拡張子を持つファイルに保存されます。

コンソールにログを表示したい場合は、filename属性を削除してください。

level属性は、ロガーのログレベルを指定し、DEBUG, INFO, WARNING, ERROR, CRITICALのいずれかを指定します。

そして、formatは、レコードの構造を指定します。

それは、構成することができます

  • (asctime)s- 文字列としてのタイムスタンプ。
  • (levelname)s-文字列としてのロギング・レベル。
  • (name)s-文字列としてのロガー名。
    (name)s-ロガーの名前 (文字列) * %(threadname)s- スレッド名 (文字列)
  • %(message)s- ログのメッセージ。

ロガーを呼び出すには、必要な場所で ” app.logger.log_level(“message”) ” を呼び出す必要があります。

Flask アプリケーションにロギングを実装する

では、FlaskアプリケーションでDefault BasicConfigのLogging Systemを適用してみましょう。

そこで、以下のようなコードを考えてみます。

from flask import Flask
import logging
 
app = Flask(__name__)
 
logging.basicConfig(filename='record.log', level=logging.DEBUG, format=f'%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s')
 
@app.route('/blogs')
def blog():
    app.logger.info('Info level log')
    app.logger.warning('Warning level log')
    return f"Welcome to the Blog"
 
app.run(host='localhost', debug=True)

サーバを起動すると、Flaskアプリケーションのフォルダ内に “record.log “が作成されます。

Webページで遊んでみると、イベントがログファイルに保存されているのがわかると思います。

Logs
Logs

まとめ

以上です。

以上、Flask のロギングについてでした。

自分のアプリケーションにロギングを実装してみてください。

タイトルとURLをコピーしました