수색…


Syslog 서비스에 로깅

Django가 로컬 또는 원격 syslog 서비스로 로그를 출력하도록 설정할 수 있습니다. 이 구성은 파이썬 내장 SysLogHandler를 사용합니다.

from logging.handlers import SysLogHandler
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[YOUR PROJECT NAME] [%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'syslog': {
            'class': 'logging.handlers.SysLogHandler',
            'formatter': 'standard',
            'facility': 'user',
            # uncomment next line if rsyslog works with unix socket only (UDP reception disabled)
            #'address': '/dev/log'
        }
    },
    'loggers': {
        'django':{
            'handlers': ['syslog'],
            'level': 'INFO',
            'disabled': False,
            'propagate': True
        }
    }
}

# loggers for my apps, uses INSTALLED_APPS in settings
# each app must have a configured logger
# level can be changed as desired: DEBUG, INFO, WARNING...
MY_LOGGERS = {}
for app in INSTALLED_APPS:
    MY_LOGGERS[app] = {
        'handlers': ['syslog'],
        'level': 'DEBUG',
        'propagate': True,
    }
LOGGING['loggers'].update(MY_LOGGERS)

장고 기본 로깅 설정

내부적으로 Django는 Python 로깅 시스템을 사용합니다. 프로젝트 로깅을 구성하는 방법은 여러 가지가 있습니다. 다음은 자료입니다.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'default'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'INFO',
        },
    }
}

포매터

로그 출력을 인쇄 할 때 로그 appearence를 구성하는 데 사용할 수 있습니다. 서로 다른 포맷터에 키 문자열을 설정하여 여러 포맷터를 정의 할 수 있습니다. 포맷터는 핸들러를 선언 할 때 사용됩니다.

핸들러

로그를 인쇄 할 위치를 구성하는 데 사용할 수 있습니다. 위의 예에서는 stdout과 stderr로 보내집니다. 다양한 핸들러 클래스가 있습니다.

'rotated_logs': {
    'class': 'logging.handlers.RotatingFileHandler',
    'filename': '/var/log/my_project.log',
    'maxBytes': 1024 * 1024 * 5,  # 5 MB
    'backupCount': 5,
    'formatter': 'default'
    'level': 'DEBUG',
},

이렇게하면 파일 filename tergeted 파일에 로그가 생성됩니다. 이 예제에서는 현재 크기가 5MB에 도달하면 새 로그 파일이 만들어지고 (이전 파일은 my_project.log.1로 이름이 바뀜) 최신 5 개의 파일이 보관을 위해 보관됩니다.

'mail_admins': {
    'level': 'ERROR',
    'class': 'django.utils.log.AdminEmailHandler'
},

이렇게하면 ADMINS 설정 변수에 지정된 사용자에게 각 로그가 eamil로 전송됩니다. 수준은 ERROR 로 설정되므로 ERROR 수준의 로그 만 전자 메일로 전송됩니다. 이것은 프로덕션 서버에서 잠재적 인 오류 50x에 대한 정보를 얻는 데 매우 유용합니다.

장고에서는 다른 핸들러를 사용할 수 있습니다. 전체 목록을 보려면 해당 문서 를 읽으십시오. 포맷터와 마찬가지로 동일한 프로젝트에서 여러 키 문자열을 각각 설정하여 여러 핸들러를 정의 할 수 있습니다. 각 핸들러는 특정 로거에서 사용될 수 있습니다.

로거

LOGGING 에서 마지막 부분은 각 모듈에 대해 최소 로깅 수준, 사용할 처리기 등을 구성합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow