인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ansghltjd9님의 프로필 이미지

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍

장고에서 Logging 하는 방법에 대해 알아보자

Logging 질문

해결된 질문

작성

·

45

0

LOGGING ={
    'version':1,
    'disable_existing_loggers':False,
    'handlers':{
        'file':{
            'level':'DEBUG',
            'class':'logging.FileHandler',
            'filename':os.path.join(BASE_DIR, 'logs/django.log'),
            'formatter':'json',
        },
        'console':{
            'class':'logging.StreamHandler',
            'formatter':'json',
        },
    },
    'formatters':{
        'json':{
            'class': 'pythonjsonlogger.jsonlogger.JsonFormatter',
            'format': '%(asctime)s %(levelname)s %(name)s %(message)s',
        },
    },
    'root':{
        'handlers':['file','console'],
        'level':'DEBUG',
    },
    'loggers':{
        'django':{
            'handlers':['file','console'],
            'level': 'DEBUG',
            'propagate':False,
        },
    },
    

runserver 하는 순간 {"asctime": "2025-02-14 20:41:50,823", "levelname": "DEBUG", "name": "django.utils.autoreload", "message": "File C:\\Users\\moon\\miniforge3\\envs\\workout\\Lib\\site-packages\\PIL\\__init__.py first seen with mtime 1739352505.781736"} 이런 변경한 적 없는 것들이 자동리로드 되면서 콘솔에 계속 올라옵니다. 이유가 궁금합니다.

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 ansghltjd9님,

Django의 runserver를 실행할 때 자동으로 리로드(Auto-reload)가 발생하는 이유는 django.utils.autoreload가 파일 변경을 감지하는 방식 때문입니다.

Django의 개발 서버 (runserver)는 코드 변경을 감지하여 자동으로 재시작하는 기능이 있습니다. 이 기능은 django.utils.autoreload 모듈을 사용하여 특정 디렉터리의 파일 변경 여부를 감지합니다. 파일의 변경을 감지하는 주요 방식은 다음과 같습니다.

  • 파일의 수정 시간 (mtime) 감지

    • Django는 실행 중인 Python 파일들의 mtime (modified time, 수정 시간)을 주기적으로 확인합니다.

    • mtime이 변경되면 Django는 이를 코드 변경으로 간주하고 자동으로 리로드합니다.

  • sys.modules를 이용한 파일 추적

    • Python이 로드한 모든 모듈 (sys.modules)을 순회하면서 해당 파일의 변경 여부를 확인합니다.

로그에서 보시면 ...

{
  "asctime": "2025-02-14 20:41:50,823",
  "levelname": "DEBUG",
  "name": "django.utils.autoreload",
  "message": "File C:\\Users\\moon\\miniforge3\\envs\\workout\\Lib\\site-packages\\PIL\\__init__.py first seen with mtime 1739352505.781736"
}

Django가 PIL (Pillow 라이브러리)의 __init__.py 파일을 감지하고, 이 파일의 mtime 값(1739352505.781736)을 처음 인식했다고 로그에 남겼습니다.

 

보기가 불편하시다면 자동 리로드 기능을 끄고 실행하는 방법도 있습니다.

python manage.py runserver --noreload

이렇게 하면 django.utils.autoreload가 동작하지 않으므로, 불필요한 리로드를 방지할 수 있습니다.