django開発-logログの構成
本番環境では、プログラムの実行ログ出力をファイルに保存する必要がある.アプリケーションがクラッシュすると、ログを検索することで問題を特定しやすくなります.django開発でログをファイルに出力する方法について説明します.
まず、ログ・レベルを見てみましょう.
djangoプロジェクトでloggingモジュールを使用してログを印刷するには、次の手順に従います.
以下に、loggingの4つのコンポーネントを紹介します.
Loggers(ログレコーダ)は、システム内の各ログがそのコンポーネントによって記録され、各レコーダには独自の名前があり、最低記録の等級をマークしなければならない.ログがloggerに与えられると、loggerはその情報のレベルを自分のレベルと比較し、ログレベルが自分のレベルを下回らない場合、loggerは次の操作を行います.ログの情報レベルがloggerより低い場合、このログは無視されます.loggerがレベルの比較を経てあるログを処理することを決定すると、そのログはHandlersに渡される
Handlers(プロセッサ)は、例えば、ログをスクリーンに印刷するか、ファイルに記録するか、ネットワーク接続に送信するかなど、特定の情報を処理するために使用される.独自のレコード・レベルです.ログ・レベルがhandlerのレベルより低い場合、handlerもログを無視します.
Filter(フィルタ):handlerに渡す前の追加機能を提供します.通常、1つのログ情報はloggerレベルに達するとhandler処理に渡されますが、filterを使用してログを追加的にフィルタできます.たとえば、filterを使用して、特定のソースのERRORレベルのみを許可するログを制御できます.Filterはまた、処理前にログを変更したり、ログのレベルを下げたり、高めたりすることも実行します.Filterはloggerとhandlerで同時に使用でき、複数のfilterが同時に動作します.
Formatter(フォーマット):最終的なログがテキスト形式で表示されるため、どのようにコンテンツを表示するかを定義します.formatterはどのようにするかを説明します.formatterは通常pythonを使用して文字列をフォーマットする方法でログをフォーマットします
最後に、ログ構成の例を見てみましょう.
settings.pyにloggerをインポートpyの構成は次のとおりです.
以上、logログの構成の紹介です.交流を歓迎します.
まず、ログ・レベルを見てみましょう.
DEBUG: ,
INFO:
WARNING: , 。
ERROR: , 。
CRITICAL: , 。
djangoプロジェクトでloggingモジュールを使用してログを印刷するには、次の手順に従います.
1. import logging
2. logging.basicConfig(level=logging.DEBUG)
3. logger logger = logging.getLogger(__name__)
4. logger.debug("logger "), logger.info(),logger.warning()
以下に、loggingの4つのコンポーネントを紹介します.
1.Loggers
2.Handlers
3.Filters
4.Formatters
Loggers(ログレコーダ)は、システム内の各ログがそのコンポーネントによって記録され、各レコーダには独自の名前があり、最低記録の等級をマークしなければならない.ログがloggerに与えられると、loggerはその情報のレベルを自分のレベルと比較し、ログレベルが自分のレベルを下回らない場合、loggerは次の操作を行います.ログの情報レベルがloggerより低い場合、このログは無視されます.loggerがレベルの比較を経てあるログを処理することを決定すると、そのログはHandlersに渡される
Handlers(プロセッサ)は、例えば、ログをスクリーンに印刷するか、ファイルに記録するか、ネットワーク接続に送信するかなど、特定の情報を処理するために使用される.独自のレコード・レベルです.ログ・レベルがhandlerのレベルより低い場合、handlerもログを無視します.
Filter(フィルタ):handlerに渡す前の追加機能を提供します.通常、1つのログ情報はloggerレベルに達するとhandler処理に渡されますが、filterを使用してログを追加的にフィルタできます.たとえば、filterを使用して、特定のソースのERRORレベルのみを許可するログを制御できます.Filterはまた、処理前にログを変更したり、ログのレベルを下げたり、高めたりすることも実行します.Filterはloggerとhandlerで同時に使用でき、複数のfilterが同時に動作します.
Formatter(フォーマット):最終的なログがテキスト形式で表示されるため、どのようにコンテンツを表示するかを定義します.formatterはどのようにするかを説明します.formatterは通常pythonを使用して文字列をフォーマットする方法でログをフォーマットします
最後に、ログ構成の例を見てみましょう.
logger.py:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
LOGGING = {
'version': 1, # , 1
'disable_existing_loggers': False, # logger
#
'formatters': {
'standard': { #
'format': '%(levelname)s %(asctime)s %(module)s %(message)s'
},
'error': { #
'format': '%(levelname)s %(asctime)s %(pathname)s %(module)s %(message)s'
},
'simple': {
'format': '%(levelname)s %(asctime)s %(message)s'
},
'collect': {
'format': '%(message)s'
}
},
# :
'handlers': {
#
'console': {
'level': 'DEBUG', #
'class': 'logging.StreamHandler', #
'formatter': 'simple' #
},
#
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # ,
'filename': os.path.join(BASE_LOG_DIR, "xx.log"), #
'maxBytes': 1024 * 1024 * 100, # 100M
'backupCount': 5, #
'formatter': 'standard', #
'encoding': 'utf-8',
},
# warn
'warn': {
'level': 'WARN',
'class': 'logging.handlers.RotatingFileHandler', # ,
'filename': os.path.join(BASE_LOG_DIR, "warn.log"), #
'maxBytes': 1024 * 1024 * 100, # 100M
'backupCount': 5, #
'formatter': 'standard', #
'encoding': 'utf-8',
},
# error
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # ,
'filename': os.path.join(BASE_LOG_DIR, "error.log"), #
'maxBytes': 1024 * 1024 * 100, # 100M
'backupCount': 5,
'formatter': 'error', #
'encoding': 'utf-8',
},
},
'loggers': {
# logger
'': {
'handlers': ['default', 'warn', 'error'],
'level': 'DEBUG',
'propagate': True, # logger ,
},
'collect': {
'handlers': ['console', 'default', 'warn', 'error'],
'level': 'INFO',
}
},
}
settings.pyにloggerをインポートpyの構成は次のとおりです.
from logger.py import LOGGING
以上、logログの構成の紹介です.交流を歓迎します.