今回は簡単な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のレベルより以上なら処理します。以下無視します。
- LoggerはLoggingシステムの始まり、Loggingするのにこれを使うことになる。Loggerには“Log Level”があり、この“Log Level”にとってLoggerの処理なども変わります。これはPythonのLog levels:
-
Handlers
- Loggerは“Log record”を処理するっていったが、ここで登場するのは“Handlers”です。
HandlersはLog recordをどんな処理するのかを決めます、例えばFileに書き込むか?Screenで表示するか?それでもネットに投げるか?など。
同じく、Handlersも自分のレベルがあり、もぢLog recordのレベルはHandlersのレベルより以上なら処理します。以下無視します。
- Loggerは“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構成です:
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')