개발을 하면 로그를 남기는 것이 매우 중요하다.
왜 무엇이 어떻게 문제를 야기했는지 추적할 수 있기 때문.
로깅 모듈에 대해서 전혀 들어 본적이 대부분의 프로그래밍 초보자들도 본능적으로 알고 있는 개념이다.
바로 내 코드가 똑바로 돌아가고 있는지 아닌지 확인하기 위해 중간중간에 print(11111) 같이 아무런 글자나 출력해서 “으음 여기까진 잘되었군” 하고 확인하는 것. 이게 바로 로깅의 시작이 아닐까.
파이썬 표준 라이브러리인 logging은 아주 강력한놈입니다. 이제 다시는… print문과 file.write를 이용해서 로그를 남기지 마세요. 우리 스마트하게 로그를 남깁시다. logging은 다양한 기능을 제공하고 있습니다. 스트림과 파일에 동시에 로그를 남기거나, 로그 레벨에 따라 출력되는 로그를 제한 할 수 있습니다. 또한 로그는 축적되는 양이 많기 때문에 예외를 처리해야 하는 내용이 많습니다. 그 중에 파일 크기가 일정 크기를 넘어가면 새로운 로그 파일을 자동으로 생성하는 기능 또한 제공합니다...(후략) by 불로
이해하기
Logging 모듈이 가능한것
- 스트림과 파일 동시에 로그를 남기는 것이 가능 (스트림이 뭐야?)
- 로그 레벨에 따라 출력되는 로그를 제한 (로그 레벨이 뭐야?)
- 파일크기가 넘어가면 새로운 파일 생성
- 스트림 : 커맨드라인 또는 터미널에서 보여지는 print function 같은것
- 로그 레벨 : 그니까 개발 중에 일어날 수 있는 이벤트 종류 중 내가 어디까지만 추적할 것인가 에 대한 역치 값이라고 할 수 있겠다.
로그레벨
1. debug
2. info
3. warn
4. error
5. critical
워크 플로우
0. Setting 클래스 생성
class Setting:
"""로거 세팅 클래스
:: Setting.LEVEL = logging.INFO # INFO 이상만 로그를 작성
"""
LEVEL = logging.DEBUG
FILENAME = "xingapi.log"
MAX_BYTES = 10 * 1024 * 1024
BACKUP_COUNT = 10
FORMAT = "%(asctime)s[%(levelname)s|%(name)s,%(lineno)s] %(message)s"
1. 로거 생성
logger = logging.getLogger(name)
2. 포매터 생성
formatter = logging.Formatter(Setting.FORMAT)
3. 핸들러 생성 (Stream, File)
streamHandler = logging.StreamHandler()fileHandler = logging.handlers.RotatingFileHandler(
filename = Setting.FILENAME,
maxBytes = Setting.MAX_BYTES,
backupCount = Setting.BACKUP_COUNT)
4. 포매터 핸들러 결합
streamHandler.setFormatter(formatter)fileHandler.setFormatter(formatter)
5. 핸들러 로거 결합
logger.addHandler(streamHandler)logger.addHandler(fileHandler)
6. 로거 레벨 설정
logger.setLevel(Setting.LEVEL)
코드
참고 사이트
이해하기 좋은 영상 아래 유튜브
- 1편 기본(logging이란)
- 2편 고급(logger instance를 생성해야 하는 이유)