원문 : http://victorlin.me/posts/2012/08/good-logging-practice-in-python/
Print 대신 표준 logging모듈 사용하기
import logging
로깅 레벨의 사용.
너무 많은 로그는 나중에 분석 할때 방해되므로 다음과 같이 사용.
debug : 디버깅시에만 임시적으로 사용 후 끝나면 삭제.
info : Request Handling 이나 서버 상태 변경 시 사용.
warn : 에러는 아니지만 중요한 정보이므로 남기고 싶을 때, ex) 유저가 잘못된 비번으로 로그인, 연결이 느릴 때.
error : 예외가 발생하거나 IO나 네트워크 작업 실패 시.
critical : 아주 나쁜 상황이 발생할 때 가끔 사용.
__name__ 키워드를 사용해서 로거 이름을 지정.
해당 코드가 삽입된 모듈명을 로그에 찍을 수 있다.
logger = logging.getLogger(__name__) logger.info('Start reading database')
Traceback을 찍자.
exc_info=True 사용시 콜스택이 로그에 남는다.
logger.error('Failed to open file', exc_info=True)
Logger를 모듈레벨에서 획득하지 말고 필요할때 그 함수나 클래스 안에서 획득 후 사용하자.
getLogger는 비용이 크지 않다.
해당 모듈이 main모듈이 아닐 때 전역적으로 로거를 미리 획득시 Logging config파일이 로드되기 이전일 수 있다.
혹은 disable_existing_loggers 옵션 사용.
Logging Config 파일 타입으로 JSON이나 YAML을 사용할 수 있다.
logger config를 JSON이나 YAML형식으로 저장해놓고 dictConfig함수를 이용해 dict 형식으로 읽어올 수 있음.
RotatingFileHandler를 사용시 로그를 여러 개 파일에 나눠 쓸 수 있다.
RotatingFileHandler를 사용하면 일정사이즈 단위로 파일을 여러개에 자동으로 나눠 써준다.