블로그 이미지
루미넌스
There are only 10 types of people, those who understand binary and those who do not.

calendar

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
2006/10/16 12:44 Dev 노트
소프트웨어를 개발하게 되면 완성된, 또는 개발중인 소프트웨어의 구동상태에 대한 로그를 필수적으로 남기게 된다. 오류 상황에 대한 기록, 디버그를 할수 있는 정보 등등 남기게 되는 내용 또한 다양하다.
Python으로 작성하는 프로그램에서 사용할 수 있는 다양한 레벨로그와, syslogd에 의한 로그와 같이 로그파일의 길이 또는 시간에 의해 백업 로그파일을 roll-over 시키는 법을 알아보자.

builtin logging package에 대하여..
  • Python 2.3에서 새로이 포함된 module package이다.
  • 기본적으로 6가지의 로그레벨(NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL)을 제공한다.
  • 사용자 정의 로그레벨을 추가할 수 있다.
  • Handler, Formatter, Filter Object를 정의하고 조합하여 다양한 형식의 로그를 다양한 저장소에 남길 수 있다.
  • Thread Safety: logging모듈패키지를 사용하면 로그파일 등의 sharing에 대해 특별한 코드를 부가하지 않아도 Thread Safety를 제공한다.


myLog module

  • 파일로그는 기본적으로 사용하며, 같은 내용의 로그를(포맷은 조금더 짧게, 변경가능) 표준출력 스트림으로도 출력하게 할 수 있다.
  • RotatingFileHandler를 사용하여 일정한 크기 단위로 파일을 밀어낸다.
  • myLog.log에 로그를 기록하다가, 파일의 크기가 설정값이상 커지면 myLog.log를 myLog.log.1로, myLog.log.1이 있다면 myLog.log.2로, 이와같이 백업로그파일을 밀어낸다.
  • TimedRotatingFileHandler를 사용하면, 일정 시간마다 로그파일을 생성하도록 만들 수도 있다.
  • logging.Formatter Object를 생성하여 각 로그의 포맷을 지정한다.
  • Python의 키워드 문자열 치환 포맷팅이 logging패키지 내부적으로 사용되며, 각 키워드의 의미는 Formatter Objects에 정리되어 있다.

Code보기


Python logging module document에 상세한 기능이 설명되어 있으므로, 여기에서는 간편하게 import할 수 있는 모듈을 제공하였다. 누구나 쉽게 구현할 수 있는 기능이지만 그 번거로움에 단순한 file-writing이나 print 구문으로 대체하여 사용하는 기능을 이 모듈을 간단히 임포트 함으로써 활용할 수 있다.
이 예제 모듈은 개발과정의 효율성을 높이기 위해 기본적 기능을 단순화하여 사용할 수 있도록 고안된 것이다. builtin으로 11가지의 로그 handler class가 제공되어 있으므로 이 모듈을 수정 또는 참고하여 socket을 사용하거나 syslogd를 이용하거나, 로그를 수집하는 웹서버(모니터서버 등)로 로그를 보내는 등의 기능을 손쉽게 확장할 수 있다.
여기 제시된 myLog.py만 사용하더라도 개발과정에서는 로그레벨을 'debug' 또는 'verbose'로 설정하여 사용하고, 서비스 릴리스단계에서는 'info' 또는 'warning'등으로 올려서 배포하는 것 만으로도 운영시의 레벨로그 관리를 수월하게 해준다.
Creative Commons License
posted by 루미넌스
TAG ,