1. ホーム
  2. django

[解決済み] django 1.3+ 用のシンプルな Log to File の例

2022-12-01 06:55:21

質問

リリースノートにはこう書かれています。

Django 1.3 は Python の logging モジュールのフレームワークレベルのサポートを追加しました。 のサポートが追加されました。

それはいいですね。それを利用したいと思います。 残念ながら 文書 は、これがいかに簡単で価値があるかを示す完全な動作例コードの形で、銀の皿の上で私にすべてを渡してくれません。

このファンキーな新機能をどのようにセットアップすれば、自分のコードに

logging.debug('really awesome stuff dude: %s' % somevar)

でファイル "/tmp/application.log" が埋め尽くされるのを確認します。

18:31:59 Apr 21 2011 awesome stuff dude: foobar
18:32:00 Apr 21 2011 awesome stuff dude: foobar
18:32:01 Apr 21 2011 awesome stuff dude: foobar

Pythonのデフォルトのロギングとこの「フレームワークレベルのサポート」は何が違うのでしょうか?

どのように解決するのですか?

私は本当にそんなにこれが大好きです!ここでは、あなたの作業例です。これは本当に素晴らしいです!

まず、これをあなたの settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': SITE_ROOT + "/logfile",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'MYAPP': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    }
}

さて、これらは何を意味するのでしょうか?

  1. フォーマット ./manage.py runserver と同じスタイルで出てくるようにしたい。
  2. ハンドラ - 私は2つのログが欲しいです - デバッグテキストファイルと情報コンソールです。 これにより、私は本当に(必要であれば)掘り下げ、ボンネットの下で何が起こっているのかを見るためにテキストファイルを見ることができます。
  3. ロガー - ここで、何を記録したいかを明確にします。 一般的に、django は WARN 以上を取得します。例外は (それゆえに伝播します) バックエンドで、SQL 呼び出しがクレイジーになることがあるので、私はそれを見るのが好きです。 最後に、私のアプリは、2つのハンドラを持っていて、すべてをそこにプッシュしています。

さて、MYAPPがこれを使えるようにするにはどうしたらいいでしょうか。

につきまして ドキュメント は、これをファイル(views.py)の一番上に置きます。

import logging
log = logging.getLogger(__name__)

そして、何かを取り出すにはこうします。

log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")

ログレベルについて説明します ここで そして純粋な Python のための ここで .