logging
- Python 내장함수로 시스템 로깅을 수행하는 모듈
- application 내의 이벤트와 정보를 기록 및 관리. 모니터링 및 디버깅.
- django도 python의 logging을 사용.
📌로깅(logging)
: 시스템의 이벤트와 정보, 상태를 기록하는 작업.
로깅 데이터는 application 모니터링 및 문제 디버깅, 분석에 사용.
logging 구성
1. logger
- 메시지 처리를 위한 요소
- 로그 레벨에 따라 설정되도록 함. 로그레벨은 메시지의 심각성 정도를 나타냄
- level을 초과하는 경우 추가처리를 해줘야 함.
- logger가 처리해야할 요소를 결정하면 handler에게로 메시지 전달
심각성 낮음 DEBUG < INFO < WARNING < ERROR < CRITICAL 심각성 높음
2. Handler
- logger에서 전달 받은 메시지에 대한 처리 방식 결정
- 로깅 동작을 기술함. 화면 출력, 파일이나 네트워크 소켓에 기록 등의 작업
- 여러개의 서로 다른 handler를 생성할 수 있음
- logger와 동일하게 handler 또한 로그 레벨을 가짐으로써 메시지의 중요도에 따라 다른 알람 제공이 가능
예) handler A 는 error와 critical 메시지를 페이징 서비스로 전달,
handler B는 모든 메시지를 파일에 기록
- 종류
Handler 설명
logging.StreamHandler 콘솔에 로그 메시지 출력. 디버깅에 사용
logging.FileHandler 로그 메시지를 파일에 기록. 로그 파일 관리 및 분석
logging.NullHandler "로그 메시지 무시. 라이브러리와 모듈 개발에 사용.
기본적 로깅 설정이 없을 경우 활용"
logging.SysLogHandler 시스템 로그로 메시지 보냄. Unix 계열 시스템에서 사용
logging.HTTPHandler "HTTP 요청을 사용해 로그 메시지를 원격서버에 전송.
로그 데이터를 중앙집중식으로 수집할 때 유용"
logging.RotatingFileHandler "크기나 파일개수에 따라 로그 파일 자동 순환(롤링).
일정크기나 개수에 도당하면 새로운 파일로 기록"
logging.TimedRotatingFileHandler 시간 간격에 따라 로그 파일 롤링. 지정 시간마다 새로운 파일로 기록
3. Filtter
- logger에서 handler로 전달되는 로그 레코드를 추가적으로 제어하기 위해 사용
- 필터를 설치하여 로깅 프로세스에 추가적인 조건 설정
예) 특정 기준 충족시 error 로그 레코드를 warning 로그 레코드로 변경하는 필터
- logger 혹은 handler에 설치. 여러 필터로 필터링 작업 가능
- 모든 로그 메시지가 처리됨
- formatter는 로그 레코드를 최종적으로 텍스트로 표시해줌
- formatter에서 텍스트의 형식을 지정
- 일반적으로는 python에서 문자열로 구성. 커스텀 포매터를 통해 특정 포맷팅을 구성할 수 있음
- 종류
Formmater 설명
logging.Formatter 기본 포매처. 로그 레코드 속성 포함하여 출력
logging.SimpleFormatter 간단한 형식. 로그 메시지와 레벨 출력
logging.IndentedFormatter 들여쓰기된 형식으로 메시지 출력
logging.ConciseFormatter 요약된 형식으로 메시지 출력. 시간, 레벨, 메시지 출력
logging.JSONFormatter JSON 형식으로 로그 메시지 출력.
logging.ColorFormatter "ANSI 컬러코드로 메시지에 색 추가하여 출력.
터미널에서 시각적 구분하고자 할 때 사용"
logging.FuncFormatter 개발자가 직접 함수제공하여 포매팅
logging 사용법
1) logging import
- logging은 python 내장 함수라, python 설치가 되어 있으면 따로 설치해주지 않아도 됨.
import logging
2) 로거(logger) 생성
logger = logging.getLogger()
3) log 출력형식(formatter) 지정
- 아래 예시는 각각 시간, logger 이름, log level, 메시지 형태로 출력을 설정하는 코드
formatter = logging.Formatter('%(asctime)s - %(name)s - % (levelname)s - %(message)s')
4) log 출력
stream_handler =logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
5) log를 파일에 저장
- log 파일을 원하는 위치에 미리 만들어 두기
file_handler = logging.FileHandler('<로그 이름>.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
6) logger를 코드에 적용하기
logger.info('에러가 발생하였습니다.')
7) log 파일에서 log확인하기
- formatter에 말맞게 log 내용이 있다면 성공!
2023-12-12 22:20:21, INFO, 에러가 발생하였습니다.
참고