Django에서 Logging 로그 구성

4971 단어
Django 로그 구성
  • django의 로그는 settings에 필요합니다.py에서 설정
    import time
         
    LOGGING_DIR = os.path.join(BASE_DIR, "logs")    # LOGGING_DIR         
    if not os.path.exists(LOGGING_DIR):
        os.mkdir(LOGGING_DIR)
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,   #       log,     
        'formatters': {  #    
            'standard': {
                'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
                          '[%(levelname)s]- %(message)s'},
            'simple': {  #     
                'format': '%(levelname)s %(message)s'
            },
        },
        'filters': {  #    
        },
        #            
        'handlers': {
            #         
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGGING_DIR, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  #     
                'backupCount': 5,  #    
                'formatter': 'standard',  #     
                'encoding': 'utf-8',  #       
            },
            #       
            'error': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGGING_DIR, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,  #     
                'backupCount': 5,  #    
                'formatter': 'standard',  #     
                'encoding': 'utf-8',  #       
            },
            #      
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard'
            },
            #   info  
            'info': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': os.path.join(LOGGING_DIR, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
                'encoding': 'utf-8',  #       
            },
        },
        #        handlers      
        'loggers': {
            #      django          ,     
            'django': {
                'handlers': ['default', 'console'],
                'level': 'INFO',
                'propagate': False
            },
            # log            
            'log': {
                'handlers': ['error', 'info', 'console', 'default'],
                'level': 'INFO',
                'propagate': True
            },
        }
    }
    
    에 대한 주석이 상세하기 때문에 더 이상 소개하지 않겠습니다.
  • 스크립트에서 호출됨:
    import logging
     
    logger = logging.getLogger('log')
    ...
    logger.info('    ! response_code:{};response_headers:{};response_body:{}'.format(response_code, response_headers, response_body[:251]))
     
    logger.error('    :{}'.format(error))
    
  • 로그 구성 사용 안 함
    LOGGING_CONFIG=None,  。
    

    Django 자체 레코더
    django              ,         django    ,          :
    
    - django.request   
    
        5XX     error  ,4XX     warning  ,               :
    
        status_code:HTTP   
        request:       request  
    
    - django.db.backends   
    
                 sql        debug   ,               :
    
        duration:sql       
        sql:   sql  
        params:sql       
    
                   ,  settings.DEBUG=True   ,        ,          。
    

    Django 자체 필터
  • class Call Back Filter (callback) 이 필터는 리셋 함수를 받아들인다. (이 함수는 매개 변수를 받아들인다. 기록된 정보는 기록이 필터를 통과할 때마다 이 리셋 함수를 호출한다. 리셋 함수가false로 되돌아갈 때 이 기록을 처리하지 않는다.다음은 예제
    from django.http import UnreadablePostError
    
    def skip_unreadable_post(record):
        if record.exc_info:
            exc_type, exc_value = record.exc_info[:2]
            if isinstance(exc_value, UnreadablePostError):
                return False
        return True
    
    'filters': {
        'skip_unreadable_posts': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': skip_unreadable_post,
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['skip_unreadable_posts'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    
  • class RequireDebugFalse 이 필터는 settings에만 있습니다.DEBUG가 False일 때 레코드를 전송합니다.
  • class Require Debug True 이 필터는 settings로만 사용됩니다.DEBUG가 True일 때 레코드를 전달합니다.
  • 좋은 웹페이지 즐겨찾기