Python/django

[ Django ] Django logging ํ•˜๊ธฐ - YEOL

tenchoi 2022. 8. 18. 18:46

๐Ÿ“€ ํ™˜๊ฒฝ 

Mac M1
Python 3.9.12
VsCode

๐Ÿ”– ๊ฐœ์š”

Django์—์„œ logsํด๋”๋ฅผ ๋งŒ๋“ค์–ด ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ด…์‹œ๋‹ค!

๐Ÿ“’ ๋ชฉ์ฐจ

  • ๋กœ๊น…์— ํ•„์š”ํ•œ ์„ค์ •
  • postman์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

 

- ๋กœ๊น…์— ํ•„์š”ํ•œ ์„ค์ •

djangoProject๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. settings.py ์— ํ•ด๋‹น ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

# ๋กœ๊ทธ ํ˜•์‹ ์ถ”๊ฐ€
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # True์ผ๊ฒฝ์šฐ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋กœ๊ฑฐ๋“ค์„ ๋น„ํ™œ์„ฑํ™”
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',  # DEBUG๊ฐ€ True์ผ ๋•Œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค ๋ญ”์†Œ๋ฆฐ์ง€
        },
    },
    # ๋กœ๊ทธํ…์ŠคํŠธ ํ˜•์‹์ •์˜
    'formatters': {
        'formatNormal': {'format': '%(levelname)s %(message)s [%(name)s:%(lineno)s]'},
        'formatTime': {'format': '[%(asctime)s] %(levelname)s %(message)s', 'datefmt': "%Y-%m-%d %H:%M:%S"},
    },
    'handlers': {
        # ํŒŒ์ผ ์ €์žฅ๋ฐฉ์‹
        'file': {
            'level': 'INFO',  # ์„ค์ •ํ•œ ๋ ˆ๋ฒจ์ด์ƒ์˜ ๋กœ๊ทธ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
            'class': 'logging.handlers.RotatingFileHandler',  # ํŒŒ์ผ์ฒ˜๋ฆฌ ํ•ธ๋“ค๋Ÿฌ๋กœ ํŒŒ์ผ์ €์žฅ
            'filename': os.path.join(BASE_DIR.parent, "logs/admin_log"+datetime.datetime.now().strftime('%Y-%m-%d')+".log"),
            'encoding': 'UTF-8',  # ์ธ์ฝ”๋”ฉ ๊นจ์ง€์ง€ ๋ง๋ผ๊ณ 
            'maxBytes': 1024 * 1024 * 5,  # 5 MB  /
            'backupCount': 5,
            'formatter': 'formatTime',
        },
        # ์ฝ˜์†”(ํ„ฐ๋ฏธ๋„)์— ์ถœ๋ ฅ
        'console': {
            'level': 'DEBUG',  # ์„ค์ •ํ•œ ๋ ˆ๋ฒจ์ด์ƒ์˜ ๋กœ๊ทธ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
            'class': 'logging.StreamHandler',  # stream์œผ๋กœ ๋กœ๊น…์ถœ๋ ฅ
            'formatter': 'formatTime',
        },
    },
    # ์„ค์ •ํ•œ ๋ ˆ๋ฒจ์ด์ƒ์˜ ๋กœ๊ทธ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.  DEBUG < INFO < WARNING < ERROR < CRITICAL
    'loggers': {
        # ์ข…๋ฅ˜
        'django.server': {
            'handlers': ['file', 'console'],
            'propagate': False,
            'level': 'DEBUG',  # ์„ค์ •ํ•œ ๋ ˆ๋ฒจ์ด์ƒ์˜ ๋กœ๊ทธ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
        },
        # 'django.server': {
        #     'handlers': ['file', 'console'],
        #     'propagate': False,
        #     'level': 'CRITICAL',
        # },
        # 'django.request': {
        #     'handlers': ['file', 'console'],
        #     'propagate': False,
        #     'level': 'DEBUG',
        # },

    },
}

์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ๋งํฌ 

์ ํ”„ ํˆฌ ์žฅ๊ณ : https://docs.python.org/ko/3/library/logging.handlers.html#logging.NullHandler

django: https://docs.djangoproject.com/en/4.0/topics/logging/#topic-logging-parts-filters

import logging
logger = logging.getLogger('django.server')



 
    def testFunc(self, request, *args, **kwargs):
        try:
            print(__name__)
            url = 'http://localhost:8080/v2/quick/testt/'
            logger.info('test1')
            logger.debug('test2')
            logger.critical('test3')
            logger.error('test4')
            logger.warning('test5')
            print(request)
            return Response(status=status.HTTP_205_RESET_CONTENT)
        except Exception as e:
            return Response(status=status.HTTP_400_BAD_REQUEST)

 

- PostMan์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

๋กœ๊ทธ ์„ธํŒ…ํ•  ๋•Œ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„ค์ •์„ ๋ณด๊ณ  ๋ณธ์ธ์ด ์›ํ•˜๋Š” ์œ„์น˜์— logs ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋กœ๊ทธ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

๐ŸŒŸ ๊ทผ๊ฑฐ ์žˆ๋Š” ์กฐ์–ธ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ์‹คํ•œ ์ฝ”๋”ฉ ํ•˜์„ธ์š”.