2023. 6. 14. 00:41ㆍT.I.L (Today_I_Learned)
Logging(로깅)
로깅은 프로그램 실행 중에 발생하는 이벤트 및 메시지를 기록하는 것 입니다.
기록된 정보는 나중에 분석, 디버깅, 성능 평가 등을 위해 사용될 수 있습니다.
프로젝트에 적용한 logging code
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{asctime} {levelname} {module} {message}',
'datefmt': '%Y-%m-%d %H:%M',
'style': '{',
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'debug_log': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': f'logs/debug/deb__{str_now}.log',
'formatter': 'verbose',
},
'error_log': {
'level': 'ERROR',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': f'logs/error/err__{str_now}.log',
'formatter': 'verbose',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['debug_log'],
'level': 'DEBUG',
'propagate': True,
},
'django.request': {
'handlers': ['error_log'],
'level': 'ERROR',
'propagate': True,
},
},
}
1. 'version': 로깅 설정의 버전을 지정합니다. 여기서는 1로 설정되어 있습니다.
2. 'disable_existing_loggers': 이미 존재하는 로거를 사용하지 않도록 할지 여부를 지정합니다. False로 설정되어 있으므로 이미 존재하는 로거들을 사용할 수 있습니다.
3. 'formatters': 로깅 메시지의 형식을 정의하는 부분입니다. 여기서는 'verbose'라는 이름의 포맷터를 정의하고 있습니다. 포맷터는 로깅 메시지를 어떻게 표시할지를 결정합니다.
4. 'handlers': 로그 메시지를 받아 처리하는 핸들러를 정의하는 부분입니다. 여기서는 'console', 'debug_log', 'error_log'라는 세 가지 핸들러를 정의하고 있습니다.
- 'console' 핸들러는 로그 메시지를 콘솔에 출력합니다.
- 'debug_log' 핸들러는 로그 메시지를 디버그용 로그 파일에 기록합니다. 로그 파일은 일정 주기로 회전됩니다.
'error_log' 핸들러는 로그 메시지를 에러용 로그 파일에 기록합니다. 로그 파일은 일정 주기로 회전됩니다.
5. 'loggers': 실제 로깅을 수행할 로거를 정의하는 부분입니다. 여기서는 'django.db.backends'와 'django.request'라는 두 개의 로거를 정의하고 있습니다.
- 'django.db.backends' 로거는 Django의 데이터베이스 백엔드에 관련된 로그 메시지를 처리합니다. 해당 로거는 'debug_log' 핸들러를 사용하고 수준(level)은 'DEBUG'로 설정되어 있습니다.
- 'django.request' 로거는 Django의 HTTP 요청에 관련된 로그 메시지를 처리합니다. 해당 로거는 'error_log' 핸들러를 사용하고 수준(level)은 'ERROR'로 설정되어 있습니다.
느낀점
팀원 분이 작성해주신 로깅을 통해 디버그 & 에러 메시지 기록을 확인할 수 있었습니다.
얼마 사용하지는 못했지만 개인적으로 로깅의 가장 큰 이점은 에러의 원인을 찾을 때 있었습니다.
아직 더 사용하면서 로깅 사용의 장점을 알아봐야 하겠습니다.
이번 계기를 통해 개발자로서 활용할 수 있는 것과 사용해야 할 것들이 굉장히 많다는 것을 다시 느꼈습니다.
'T.I.L (Today_I_Learned)' 카테고리의 다른 글
T.I.L June 26, 2023 (최종 프로젝트 중간 발표 후 KPT 회고) (0) | 2023.06.26 |
---|---|
T.I.L June 19, 2023 - Git soft reset (0) | 2023.06.19 |
T.I.L June 13, 2023 (DB 개발/배포 환경에 따라 자동 설정) (0) | 2023.06.13 |
T.I.L June 12, 2023 (test code) (0) | 2023.06.12 |
T.I.L June 7, 2023 (OAuth 2.0) (0) | 2023.06.07 |