2018年5月29日火曜日
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/05/djangoformatters.html

Djangoのログ出力のformatters解説

Djangoのログ出力において、出力する内容を制御する箇所、それがformattersです。
これの設定方法についてご説明します。


Python標準

DjangoのログはDjangoならではの機能を使っているわけではなくPython標準のものですので、formattersについてもPythonの公式サイトに載っています。


日本語訳のページもあったりしますが、これらを私なりに分かり易くかいつまんで整理した表が以下になります。

これがFormatter設定の一覧だ!!

Formatter設定一覧表

属性名 フォーマット 説明 出力例
asctime %(asctime)s ログ出力日時 2018-05-29 16:28:03,959
created %(created)f ログ出力日時(time.time() で返される形式) 1527578944.896623
filename %(filename)s ログを出力しているファイルのファイル名 views.py
funcName %(funcName)s ログを出力している場所のメソッド名 index
levelname %(levelname)s ログレベル DEBUG、INFO、WARNING、ERROR、CRITICAL
levelno %(levelno)s ログレベルを数字で表したもの 10、20、30、40、50
lineno %(lineno)d ログを出力している場所の行数 12
message %(message)s ログメッセージ あいうえおかきくけこ
module %(module)s モジュール名。filenameの名前部分 views
msecs %(msecs)d asctimeのミリ秒部分 684
name %(name)s ロガー名。
logger = getLogger(__name__)
↑この「__name__」の部分
start_samples.views
pathname %(pathname)s ログを出力しているファイルのフルパス C:/Users/uzu/heibon_django/start_samples/views.py
process %(process)d プロセス ID (利用可能な場合のみ) 9860
processName %(processName)s プロセス名 (利用可能な場合のみ) MainProcess
relativeCreated %(relativeCreated)d システムが起動してから経過したミリ秒 12152
thread %(thread)d スレッド ID (利用可能な場合のみ)。 7456
threadName %(threadName)s スレッド名 (利用可能な場合のみ)。 Thread-1


私の愛用設定

上の表があれば、後はお好みでどのようにでもログを出力すれば良いかと思いますが、私の愛用設定を以下に掲載しておきます。

オススメ設定

        'heibon': {
            'format': '\t'.join([
                "[%(levelname)s]",
                "%(asctime)s",
                "%(name)s:%(lineno)d",
                "%(message)s",
                "%(threadName)s",
            ])
        },

出力結果

[DEBUG] 2018-05-29 16:48:35,361 start_samples.views:9   デバッグ        Thread-1
[INFO]  2018-05-29 16:48:35,361 start_samples.views:10  インフォ        Thread-1
[WARNING]       2018-05-29 16:48:35,361 start_samples.views:11  ワーニング      Thread-1
[ERROR] 2018-05-29 16:48:35,361 start_samples.views:12  エラー  Thread-1
[CRITICAL]      2018-05-29 16:48:35,362 start_samples.views:13  クリティカル    Thread-1

ちなみに意外に馬鹿にならないのが「スレッド名(%(threadName)s)」ですね。 複数人同時アクセスが来た場合にスレッド名で絞り込むと一人に特定出来たりするので、お尻の部分にコソッと表示しておくのがオススメです。

バックナンバー


0 件のコメント:

コメントを投稿

お気軽にコメント下さい。