Djangoでログの出力方法、使い方について解説する

スポンサーリンク

この記事では、Djangoのロギングについてのすべてを学びます!

スポンサーリンク

なぜロギングが重要なのか?

プログラマーである私たちは、たくさんのコードを書き、それゆえ、たくさんの エラーを抱えることになります。

今、トレースバックして、どこにエラーがあるのかを正確に見つけるのは、非常に時間がかかります。

そこで、ロギングモジュールの出番です。

ロギングモジュールは、開発者に新しいビジョンを与え、エラーを素早く発見し、デバッグすることができます

Django におけるロギングとは?

ロギングとは、コード/システムの実行中に発生したイベントをリアルタイムにトレースする ための技術です。

ロギングは別のプログラムとして動作します。

単純なファイルライターのようなものだと思えばいいでしょう。

システムが実行されると、イベントを追跡し、コンソールやログと呼ばれるファイルに記録していきます。

ログは、すべての記録をテキスト形式で持つ、拡張子がlogの単純なファイルです。

また、ログはさらに以下のような付加的な機能を持っています。

  • マルチスレッドの実行が可能
  • 異なるログレベルによりメッセージを分類するオプション
  • より柔軟な設定が可能です。
  • より構造化された情報を持っています。

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 にコードを追加します。

Logging Flow
Logging Flow

上のセクションで学んだロジックを覚えて、コードを理解するようにしましょう

views.py で Django のロギング関数を呼び出す

settings.py でロギングを指定したので、views.py ファイル内の好きな場所に関数呼び出しを追加します views.py で import logging して、冒頭にコードを記述します

logs
logs

_name は、関数が呼び出されるファイルの名前を引きます。

これを利用して、現在のファイルを特定し、そこからロギングメソッドを追加していきます。

ここでは、views.py の任意の場所に logging.info 関数呼び出しを追加しています。

LOGGING
LOGGING

ItemViewの中も同様です。

Views 1
Views 1

Django ロギングを実行する

これで完了です! これでプログラムを実行し、ロギングに全てのログを記録させることができます。

Views 2
Views 2

この後、 log_file1.log が自動的に作成され、ログ記録の保存が開始されます。

Log File
Log File

ログは、フォーマッタで説明したように、最初にレベル名、次にメッセージで保存されます。

まとめ

以上、皆さん!  これは Django のロギングについての全てです。

ロギングに関するより多くの情報は Python Logging をチェックしてください。

また、 Django のロギングについて、公式ドキュメントからもっと知ることができます。

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