django開発-logログの構成


本番環境では、プログラムの実行ログ出力をファイルに保存する必要がある.アプリケーションがクラッシュすると、ログを検索することで問題を特定しやすくなります.django開発でログをファイルに出力する方法について説明します.
まず、ログ・レベルを見てみましょう.
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ログの構成の紹介です.交流を歓迎します.