LoginSignup
4
2

More than 5 years have passed since last update.

django#logging

Posted at

今回は簡単なdjangoのLoggingプログラムを作ります。難しいことはやってないので、基本なpython知識あればokです。

流れ

LOGGINGの簡単説明
settings.py にLOGGINGの設定する

LOGGINGの簡単説明

DjangoはPythonの標準Loggingモジュールを使ってシステムLoggingをします。Python loggingの構成は以下の四つになります:

  • Loggers

    • LoggerはLoggingシステムの始まり、Loggingするのにこれを使うことになる。Loggerには“Log Level”があり、この“Log Level”にとってLoggerの処理なども変わります。これはPythonのLog levels:
      • DEBUG:まぁ、いわゆるDebug用、開発者が使うレベル
      • INFO:システムの一般情報
      • WARNING:システムが小さい問題が発生したときの情報
      • ERROR:システムがメイン問題が発生したときの情報
      • CRITICAL:システムが非常に大きな問題が発生したときの情報
    • メッセージなどがLoggerに渡すときは“Log Record”です。“Log Record”が自分のLog Levelがあり、このメッセージの重要性をがわかります。流れとしては:
      • メッセージがLoggerに渡しします。
      • LoggerこのLog recordのレベルと自分のレベルに比較します。
      • Log recordのレベルはLoggerのレベルより以上なら処理します。以下無視します。
  • Handlers

    • Loggerは“Log record”を処理するっていったが、ここで登場するのは“Handlers”です。 HandlersはLog recordをどんな処理するのかを決めます、例えばFileに書き込むか?Screenで表示するか?それでもネットに投げるか?など。 同じく、Handlersも自分のレベルがあり、もぢLog recordのレベルはHandlersのレベルより以上なら処理します。以下無視します。
  • Filters

    • Loggingするともちろん大量のLogがFileの中に貯まることになるので、ここでFilterをかければ特定なErrorなどだけをLoggerすることができます。
  • Formatters

    • 最後に、Loggingがどんな形?例えば日付がどんな表示なのか?などの設定はこのFormattersに任せます。

settings.py にLOGGINGの設定する

今度はLoggingの設定をやってみよう。DjangoがdictConfig fomat を使っています。
このあたり↓には詳しい説明があります。
https://docs.python.org/3/library/logging.config.html#logging-config-dictschema
こちらは今回のFile構成です:
image.png

settings.pyの一番下にLOGGIN={}を入れます

#for logging
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters':{

        'standard':{
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"

        },
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'debug.log',
            'maxBytes': 50000,
            'backupCount':2,
            'formatter':'standard',
        },
        'console':{

            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter':'standard'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'main':{
            'handlers':['file','console'],
            'level':'DEBUG',
            'propagate':True,

        }
    },
}

次はviews.pyに簡単なLoggerを作ります。

from django.shortcuts import render
from django.http import HttpResponse
import logging

logger=logging.getLogger(__name__)

def homepage(request):
    logger.info('info is logged')
    return HttpResponse('hello')

サーバ走ったら、OKになりましたね!
image.png

Consoleにもありましたね!
image.png

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2