Django 로그 처리

7938 단어 Django
로그 처리
로그 수준
  • DEBUG: 디버깅을 위한 하위 시스템 정보
  • INFO: 일반 시스템 정보
  • WARNING: 발생하는 사소한 문제를 설명하는 정보입니다.
  • ERROR: 발생하는 주요 문제에 대한 정보를 설명합니다.
  • CRITICAL: 발생하는 주요 문제를 설명하는 정보
    낮은 레벨을 선택하면 기본적으로 자신의 레벨 이상의 정보를 포함하지만 아래로 포함하지 않습니다. 즉,ERROR레벨INFO, DEBUG 오류 메시지는 무시됩니다.

  • 필터
  • Django는 일부 오류 정보 처리만 포함하고 자신의 이상 처리를 추가로 확장할 필요가 있으면 필터를 추가하고 이 이상을 제어하는 방법이 필요합니다.
    예: 하나만 처리할 수 있도록 지정할 수 있습니다.ERROR레벨에서 보내는 특정 메시지의 필터, 예를 들어 기록과 같은 불필요한 동작을 필터할 수 있습니다DEBUG 로그

  • 서식 적용
  • 오류 정보를 정확한 형식으로 로그 파일에 쓰기verbose 로그에 대한 상세한 기록
  • 'formatters': {
            #      
            """
            levelname:     
            asctime:     
            module :     
            process :     
            thread :     
            message :     
            """
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
            }
    simple 간단한 기록으로 경고 레벨과 로그 메시지만 출력하고 더 지정할 수 있습니다
    로깅 열기
    import logging
    
    logger = logging.getLogger(__name__)
    
    def my_view(request, arg1, arg):
        ...
        if bad_mojo:
            #        
            logger.error('     ')
    

    로그 처리 레코드 수동 호출
  • logger.debug()
  • logger.info()
  • logger.warning()
  • logger.error()
  • logger.critical()
  • logger.log() 특정 로그 레벨의 로그 메시지를 수동으로 보내기
  • logger.exception() ERROR 포장 현재 이상 창고 프레임의 레벨 로그 생성
  • 인스턴스, 프로파일에서 로그 작업 구성
    LOGGING = {
        #     
        'version': 1,
        #           ,Flase     ,                 
        'disable_existing_loggers': False,
        #    ,      
        'formatters': {
            #   
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d  %(thread)d %(message)s'
            },
            #   ,         ,   
            'simple': {
                'format': '%(levelname)s %(module)s  %(message)s'
            },
        },
        #    ,   debug     ,  :debuf       ,     
        'filters': {
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        #        
        'handlers': {
         #     DEBUG               
            'console': {
                'level': 'DEBUG',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            #  INFO              
            'file': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',
                #        
                'filename':
                os.path.join(os.path.dirname(BASE_DIR), "logs/meiduo.log"),  
                #        300M
                'maxBytes': 300 * 1024 * 1024,
                #         ,                
                'backupCount': 10,
                'formatter': 'verbose'
            },
        },
        #    ,                 
        'loggers': {
            'django': {  #       django    
                'handlers': ['console', 'file'],
                #                  
                'propagate': True,
            },
        }
    }
  • version 공식 해석은 소용없지만 반드시 써야 한다
    구성을 dictConfig version 1 형식으로 해석합니다.지금까지 dictConfig 형식의 유일한 버전입니다.

  • 사용자 정의 비정상 프로세서
  • Django는 자체적으로 적은 부분의 이상 처리를 가지고 있으며, 우리 프로그램에는 다른 이상이 포함되어 있어 스스로 정의해야 한다
  • #        
    logger = logging.getLogger('django')
    
    def exception_handler(exc, context):
        """
               
        :param exc:   
        :param context:         
        :return: Response    
        """
        #   drf           
        response = drf_exception_handler(exc, context)
    
        if response is None:
            view = context['view']
            if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
                #      
                logger.error('[%s] %s' % (view, exc))
                response = Response({'message': ''}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
        return response
    
    -----------------
    #             
    REST_FRAMEWORK = {
        #   rest_framework          
        'EXCEPTION_HANDLER': 'meiduo_mall.utils.exceptions.exception_handler',
    }

    좋은 웹페이지 즐겨찾기