Django Logging 에러 해결 방법

2025. 3. 4. 16:24개발/Django

728x90
반응형

Django Logging 에러 해결 방법

Django 프로젝트에서 로깅을 설정하는 과정에서 KeyError: 'ip' 오류가 발생하는 경우가 있다. 해당 오류의 원인을 분석하고 해결하는 방법을 정리하였다.

에러 발생 원인

1. LogRecord Attributes 미존재 항목 추가

Django의 기본 LogRecord에는 ip, user, method 등의 속성이 존재하지 않는다. 따라서 로깅을 설정할 때 추가적인 속성을 포함하려고 하면 KeyError가 발생할 수 있다.

2. django.request 로거 중복 호출

Django는 기본적으로 django.request 로거를 내부적으로 사용하고 있다. 따라서, 미들웨어에서 동일한 로거를 사용하면 예상치 못한 동작이 발생할 수 있다.

에러 해결 방법

1. django.request 로거가 아닌 새로운 로거 사용

기존에 django.request 로거를 사용하던 코드를 새로운 로거로 변경한다.

변경 전 (에러 발생 코드)

self.logger = logging.getLogger("django.request")

변경 후 (에러 해결 코드)

self.logger = logging.getLogger("django.server")

이렇게 하면 Django 내부 로거와 충돌하는 문제를 방지할 수 있다.

또한, Django의 기본 로거를 직접 사용하기보다는, 프로젝트별로 독립적인 로거를 생성하는 것이 더 바람직하다. 예를 들어, groupware라는 별도의 로거를 설정하면 다른 로깅 설정과 충돌을 방지할 수 있다.

프로젝트별 독립적인 로거 사용 예시

self.logger = logging.getLogger("groupware")

이렇게 하면 groupware라는 별도의 로거를 생성하여, 프로젝트 내에서 필요한 로깅을 독립적으로 관리할 수 있다. 이를 통해 Django 기본 로거(django.server, django.request)와의 충돌을 방지하고, 필요에 따라 더 세밀한 로깅 설정을 적용할 수 있다.

2. settings.py에서 로거 설정 변경

기존 django.request를 사용하지 않고, 새로운 django.server 로거를 추가한다.

변경 전 (에러 발생 코드)

"loggers": {
    "django.request": {
        "handlers": ["file_info"],
        "level": "INFO",
        "propagate": False,
    },
}

변경 후 (에러 해결 코드)

"loggers": {
    "django.server": {
        "handlers": ["file_info"],
        "level": "INFO",
        "propagate": False,
    },
    "groupware": {
        "handlers": ["file_info"],
        "level": "INFO",
        "propagate": False,
    },
}

이제 django.servergroupware 로거를 사용하여 로깅을 수행할 수 있다.

결론

Django에서 커스텀 로깅을 설정할 때, 기본 django.request 로거를 직접 사용하면 예상치 못한 동작이 발생할 수 있다. 따라서, 새로운 django.server 또는 groupware와 같은 독립적인 로거를 생성하고 사용하는 것이 바람직하다. 이를 통해 프로젝트별로 로깅을 효율적으로 관리할 수 있으며, Django 내부 로거와의 충돌을 방지할 수 있다.