본문 바로가기
Programming/Django

Django에서 Python Logger 사용하기

by 느리게 걷는 즐거움 2024. 7. 5.
반응형

Django에서 Python Logger 사용하기

Django에서 로그를 사용하는 것은 애플리케이션의 문제를 추적하고 디버깅하는 데 매우 유용합니다. Python의 표준 로깅 라이브러리를 활용하여 로그를 남기는 방법을 알아보겠습니다.

로깅 설정 (Logging Configuration)

Django는 `LOGGING` 설정을 통해 로깅을 구성할 수 있습니다. `settings.py` 파일에서 `LOGGING` 설정을 추가합니다.

# settings.py

import os

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'debug.log'),
            'formatter': 'verbose',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'myapp': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}

위의 설정에서, 두 개의 핸들러(`file`, `console`)와 두 개의 로거(`django`, `myapp`)를 정의하였습니다. `file` 핸들러는 파일(`debug.log`)에 `verbose`포메터를 사용하여 로그를 저장하고, `console` 핸들러는 콘솔에 `simple`포메터를 이용해서 로그를 출력합니다.

로깅 설정 (LOGGING Configuration)

LOGGING 설정은 로깅 시스템을 구성하는 데 사용됩니다. 이 딕셔너리는 여러 섹션으로 나뉘어 있습니다.

Key 설명
version 로깅 설정의 버전을 지정합니다. 현재 버전은 1입니다.
disable_existing_loggers 기존의 로거들을 비활성화할지 여부를 결정합니다. False로 설정하면 기존 로거들이 비활성화되지 않습니다.
formatters 로그 메시지의 형식을 지정하는 섹션입니다.

verbose: 로그 메시지를 상세하게 출력합니다. {levelname}, {asctime}, {module}, {message} 등의 정보를 포함합니다.


simple: 간단한 형식으로 로그 메시지를 출력합니다. {levelname}와 {message}만 포함합니다.
handlers 로그 메시지를 처리하고 기록하는 방법을 지정합니다.

file: 로그 메시지를 파일(debug.log)에 기록합니다. DEBUG 레벨 이상의 메시지를 기록하며, verbose 형식을 사용합니다.

console: 로그 메시지를 콘솔에 출력합니다. DEBUG 레벨 이상의 메시지를 기록하며, simple 형식을 사용합니다.
loggers 로거를 정의하고, 어떤 핸들러를 사용할지 지정합니다.

django: Django 프레임워크에서 사용되는 기본 로거입니다. file과 console 핸들러를 사용하며, DEBUG 레벨 이상의 메시지를 기록합니다. propagate가 True로 설정되어 있어 상위 로거로 로그 메시지가 전달됩니다.

myapp: 사용자가 정의한 애플리케이션(myapp)에서 사용되는 로거입니다. file과 console 핸들러를 사용하며, DEBUG 레벨 이상의 메시지를 기록합니다. propagate가 False로 설정되어 있어 상위 로거로 로그 메시지가 전달되지 않습니다.

Django에서 로깅 포매터(formatter)는 로그 메시지의 형식을 지정하는 역할을 합니다. 포매터의 형식은 Python의 표준 로깅 모듈에서 제공하는 형식 문자열(format string)을 사용하여 구성할 수 있습니다.

포매터의 형식은 특정 변수를 사용하여 로그 메시지를 구성합니다. 여기에는 로그 레벨, 시간, 모듈, 메시지 등 다양한 정보가 포함될 수 있습니다. 다음은 자주 사용되는 포매터 변수와 설명입니다.

포메터 변수

포매터의 형식은 특정 변수를 사용하여 로그 메시지를 구성합니다. 여기에는 로그 레벨, 시간, 모듈, 메시지 등 다양한 정보가 포함될 수 있습니다. 다음은 자주 사용되는 포매터 변수와 설명입니다:

변수명 성명 예시
asctime 로그가 기록된 시간 2024-07-05 12:00:00
levelname 로그 레벨 DEBUG, INFO, WARNING, ERROR, CRITICAL
message 로그 메시지 This is a debug message
name 로거의 이름 myapp
module 로그가 발생한 모듈 이름 views
filename 로그가 발생한 파일 이름 views.py
funcName 로그가 발생한 함수 이름 my_view
lineno 로그가 발생한 라인 번호 42
pathname 로그가 발생한 파일의 전체 경로 /path/to/project/views.py
process 프로세스 ID 12345
thread 스레드 ID 139784

 

로거 사용 (Using Logger)

이제 로거를 사용하여 로그를 남기는 방법을 알아보겠습니다. 로거를 사용하려는 파일에서 다음과 같이 로거를 설정합니다.

# myapp/views.py

import logging

logger = logging.getLogger('myapp')

def my_view(request):
    logger.debug("Debug message")
    logger.info("Info message")
    logger.warning("Warning message")
    logger.error("Error message")
    logger.critical("Critical message")
    return HttpResponse("Logging example")

 

`logging.getLogger('myapp')`를 통해 설정된 `myapp` 로거를 가져오고, 다양한 로그 레벨로 메시지를 기록할 수 있습니다.

로그 레벨 (Log Levels)

로그 메시지는 다음과 같은 로그 레벨을 가질 수 있습니다.

로그레벨 설명
DEBUG 디버그 메시지, 매우 상세한 진단 정보를 제공
INFO 일반 정보를 제공
WARNING 경고 메시지, 심각하지 않은 문제를 나타냄
ERROR 에러 메시지, 문제가 발생했음을 나타냄
CRITICAL 치명적인 문제를 나타냄

각 로그 레벨은 중요도에 따라 필터링할 수 있습니다. 예를 들어, `DEBUG` 레벨로 설정된 로거는 `DEBUG` 이상의 모든 로그를 기록합니다.

실습: 로그 메시지 출력

이제 앞서 설정한 `myapp/views.py`에서 로그를 기록하고, 콘솔과 파일에 로그 메시지가 출력되는지 확인해보겠습니다.

1. 서버를 실행

   python manage.py runserver


2. 콘솔과 `debug.log` 파일에서 로그 메시지를 확인합니다. 다음과 같이 로그 메시지가 출력됩니다:

  DEBUG myapp.views Debug message
  INFO myapp.views Info message
  WARNING myapp.views Warning message
  ERROR myapp.views Error message
  CRITICAL myapp.views Critical message

 

이와 같이 Django에서 Python Logger를 사용하여 애플리케이션의 로그를 남기고, 다양한 로그 레벨과 핸들러를 통해 로그를 관리할 수 있습니다. 로깅을 잘 활용하면 애플리케이션의 상태를 파악하고 문제를 빠르게 해결하는 데 큰 도움이 됩니다.

반응형

'Programming > Django' 카테고리의 다른 글

Django에서 Template 폴더 설정하기  (0) 2024.07.04
Django Template 생성하기  (0) 2024.07.04