[Django] Logging

김유상·2022년 12월 22일
0
post-custom-banner

장고에서는 프레임워크 차원에서 로그를 관리해주는 기능을 가지고 있는데 settings.py에 로깅에 관한 정의를 해주면 된다.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'django.server': {
            '()': 'django.utils.log.ServerFormatter',
            'format': '[{server_time}] {message}',
            'style': '{',
        },
        'standard': {
            'foramt': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        },
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'file': {
            'level': 'INFO', # info 이상의 로그를 모두 출력
            'filters': ['require_debug_false'],
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': BASE_DIR / 'logs/mysite.log', # 로그를 출력할 경로와 파일명
            'maxBytes': 1024*1024*5,  # 5 MB
            'backupCount': 5,
            'formatter': 'standard',
        },
    },
    'loggers': {
        'django': { # 여러 개의 로거를 임의로 설정할 수 있다.
            'handlers': ['console', 'mail_admins', 'file'],
            'level': 'INFO',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}
import logging
logger = logging.getLogger('django')

class Post(models.Model):
    def get_file_ext(self):
        file, ext = os.path.splitext(self.get_file_name())
        logger.info(ext)
        return ext

위 코드와 같이 사용하면 django logger를 이용해 로그를 출력할 수 있다. 임의의 로거를 정의하고 싶은 경우, settings.py의 logging/loggers 내부에 정의해주면 된다.

로그를 파일로 출력하고 싶은 경우 logging/handlers에 파일의 경로와 파일 명을 같이 정의하면 경로에 로그 파일이 생성된 것을 확인할 수 있다. 하지만 경로는 자동으로 생성해주지 않으므로 경로에 필요한 폴더를 미리 만들어 두어야 한다.
그리고 콘솔 출력이 아닌 파일 출력으로 로그를 확인하고 싶은 경우 Debug 플래그를 False로 바꿔주어야 한다.

Referenced: https://wikidocs.net/77522

profile
continuous programming
post-custom-banner

0개의 댓글