この記事では、Djangoのロギングについてのすべてを学びます!
なぜロギングが重要なのか?
プログラマーである私たちは、たくさんのコードを書き、それゆえ、たくさんの エラーを抱えることになります。
今、トレースバックして、どこにエラーがあるのかを正確に見つけるのは、非常に時間がかかります。
そこで、ロギングモジュールの出番です。
ロギングモジュールは、開発者に新しいビジョンを与え、エラーを素早く発見し、デバッグすることができます。
Django におけるロギングとは?
ロギングとは、コード/システムの実行中に発生したイベントをリアルタイムにトレースする ための技術です。
ロギングは別のプログラムとして動作します。
単純なファイルライターのようなものだと思えばいいでしょう。
システムが実行されると、イベントを追跡し、コンソールやログと呼ばれるファイルに記録していきます。
ログは、すべての記録をテキスト形式で持つ、拡張子がlogの単純なファイルです。
また、ログはさらに以下のような付加的な機能を持っています。
- マルチスレッドの実行が可能
- 異なるログレベルによりメッセージを分類するオプション
- より柔軟な設定が可能です。
- より構造化された情報を持っています。
この記事もチェック:Djangoで自作ブログ(CMS)を作る方法|コメント機能も作るよ
4 Django のロギングの一部です。
Django のロギングを行うには 4 つの部分があります。
それらが何であるかを確認しましょう。
1. Django ロガー
これはロギングシステムへのエントリーです。
ロガーは、ロギングが呼び出されたとき、処理のためにイベントを記録する部分です。
また、ロガーはログレベルを持つように設定されます。
ログレベルは、ロガーが取り込む、または処理するイベントの重要度を示します。
| ログ レベル│説明│重大度│。
| — | — | — |
| DEBUG|すべてが正常に動作しているときのシステム情報です。
| 10 |
| INFO|デバッグに似ています。
一般的にシステムが実行していることの概要を伝える。
| 20 |
| 警告:システムを停止させない低レベルの問題を含んでいます。
| 30 |
| ERROR|このメッセージは深刻です。
これは、問題がシステムの動作を停止させた可能性があり、直ちに注意を払う必要があることを示しています|40|。
| CRITICAL|最も重要なメッセージです。
問題が原因でシステムが停止した場合に表示されます。
ロガーに書き込まれる各メッセージは、ログ レコードと呼ばれます。
ログ レベルがロガーより大きいメッセージだけが処理のために取り込まれ、残りはすべて無視されます。
2. Django ハンドラ
これは Django のロギングシステムにおける次のレベルです。
これは、 logger 内のログレコードに何が起こるかについての更なる情報を持っています。
つまり、ログレコードが書き込まれる場所 (コンソールやファイルなど) や、ログレコードに適用されるフィルタやフォーマッタの種類に関する情報を持っています。
ロガーと同様に、ハンドラもログレベルを持ちます。
ログレコードがハンドラのログレベルと同じかそれ以上でない場合、それは無視されます。
3. Django フィルタ
その名が示すように、これは logger から handler に渡される Log レコードに更なるフィルタリングを提供します。
例えば、通常、ログレベルの要件を満たすログメッセージは処理されます。
しかし、特定のソースからの ERROR メッセージだけを出力/書き込みできるようなフィルタをインストールすることができます。
4. Django フォーマッタ
最終的に、ログレコードはテキストとして保存されなければなりません。
ログレコードは通常、ロギングフレームワークによってあらかじめ定義されたログレコードフォーマットになっています。
しかし、ファイルとして保存するためには、まず正しい形式に変換する必要があります。
そのため、フォーマッタを使用して変換します。
フォーマッターは、デフォルトでは文字列に変換します。
しかし、必要に応じて変更したり、カスタマイズしたりすることができます。
流れはとてもシンプルです。
LOGGING = {
'version' : 1 ,
# Version of logging
'disable_existing_loggers' : False ,
'filters' :{
#information regarding filters
},
'formatters' :{
'<formatter_name>' :{
'format' : '<formatter_info>' ,
'style' : '{' ,
}
},
'handlers' : {
'file' : {
'level' : '<log_level>' ,
'class' : '<logging_class>' ,
'filename' : '<file_name>' ,
},
'console' : {
'class' : '<logging_class>' ,
},
},
'loggers' : {
'django' : {
'handlers' : [ 'file' , 'console' ],
'level' : '<log_level>' ,
},
},
|
Django Logging ディレクトリを settings.py に追加します。
ロガー、ハンドラ、フィルタ、フォーマッタに関する全ての情報は、 settings.py 自身に書かなければなりません。
基本的な構文は以下の通りです。
import logging
logger = logging.getLogger(__name__)
|
ここです。
- バージョン。使用するロギングのバージョンです。
- disable_existing_loggers: 既存のロガーを無効にします。デフォルトで、Django はロガーを無効にしています。だから、有効に戻す必要がある。
- Filters: ロギングで使用するフィルタについて説明します。
- フォーマッタ。ログレコードのフォーマットに関する全ての情報はここにあります。
- ハンドラ。ログレコードに対して実行されるすべての処理がここに書かれています。ストレージの場所、使用するフォーマッタ、追加するフィルタなど。
- ロガー。ハンドラの情報、ログレコードの受け渡し先、ログレベルなどを記述します。
そこで、アプリケーションに簡単な Logging ディレクトリを追加して、ログレベルが DEBUG 以上のすべてのレコードを log フォルダに存在するログファイルに保存することにしましょう。
Django のプロジェクトフォルダ内に log フォルダを作成します。
python manage.py runserver |
settings.py にコードを追加します。
上のセクションで学んだロジックを覚えて、コードを理解するようにしましょう
views.py で Django のロギング関数を呼び出す
settings.py でロギングを指定したので、views.py ファイル内の好きな場所に関数呼び出しを追加します views.py で import logging して、冒頭にコードを記述します
_name は、関数が呼び出されるファイルの名前を引きます。
これを利用して、現在のファイルを特定し、そこからロギングメソッドを追加していきます。
ここでは、views.py の任意の場所に logging.info 関数呼び出しを追加しています。
ItemViewの中も同様です。
Django ロギングを実行する
これで完了です! これでプログラムを実行し、ロギングに全てのログを記録させることができます。
この後、 log_file1.log が自動的に作成され、ログ記録の保存が開始されます。
ログは、フォーマッタで説明したように、最初にレベル名、次にメッセージで保存されます。
まとめ
以上、皆さん! これは Django のロギングについての全てです。
ロギングに関するより多くの情報は Python Logging をチェックしてください。
また、 Django のロギングについて、公式ドキュメントからもっと知ることができます。