«   2018/05   »
    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    
Tags
more
Archives
Today
0
Total
1,148
관리 메뉴

피아노 치는 개발자

[python] 로깅 모듈 본문

개발/일반

[python] 로깅 모듈

Claude.Seo 2016.11.05 17:53

로깅이란? 개발이나 운영시 발생하는 문제점을 추적하거나 상태를 모니터링하기 위해 필요한 데이터를 기록하는 행위이다.

얼마전까지만 해도 로그를 남긴다는것에 대해 귀찮다는 생각과 `구지 왜 남겨야하지?`라는 생각을 가지고 있었는데 실제 서비스를 운영하다보니 로그의 중요성을 깨달을 수 있게 되었다.


로그가 없는 상황에서 사용자가 서비스 이용중에 오류가 발생했다고 컴플레인이 들어오게되면 정말 막막하게 된다.

사용자가 어떤 환경에서 어떤 동작을 취했는지 정확하게 추적을 할 수 없기 때문에 직접 수동으로 다 테스트해봐야한다. ( 이렇게 개발자가 직접 테스트한다고 100% 같은 오류를 재현할 수 있는건 아니다 )

그렇기 때문에 나는 운영중인 서비스마다 로그를 남기기로 결정했고 방법을 찾다가 파이썬 표준 라이브러리 logging을 사용하기로 했다.



로그 레벨

로그는 5가지 종류들로 이루어져 있으며 상황에 맞춰 레벨을 선정하여 사용한다.

1. DEBUG

2. INFO

3. WARNING

4. ERROR

5. CRITICAL



* 기본값이 logging.WARNING 으로 설정되어 있기 때문에 `logging.basicConfig(level=logging.DEBUG)` 를 설정하지 않으면 WARNING 이하의 레벨들은 출력되지 않는다. 



파일로 저장하기

위의 코드를 실행하게 되면 스트림으로 로그가 출력된다. 로그는 추후 분석해야할 수 있게 해야하므로 파일로 저장해보자.


실행 결과

로그가 스트림으로 출력되지 않고 같은 폴더에 `test.log` 파일이 생기고 그 안에 로그가 기록되었다



스트림과 파일에 동시에 로그 출력하기

스트림과 파일에 동시에 로그를 출력하고 싶으면 어떻게 해야될까? 방법은 아래와 같다.

1. 로거 인스턴스 생성

2. 로그 핸들러 지정

3. 로거 인스턴스로 로그 출력


실행결과

스트림과 `test.log` 파일에 로그가 기록된걸 확인할 수 있다



로그의 포매팅

위의 코드들을 보면 단순 지정한 문자열만 들어가는것을 확인할 수 있다. 여기까지라면 단순 file write, print 를 사용하는거와 다를게 없다. 좀 더 고급스럽게 로그를 남기기 위해 모든 로그의 형태를 변형해보자.


로그의 형태를 변형하려면 Formatter를 사용하면 되며 더 많은 attribute를 보고싶다면 아래의 참고사이트에서 확인할 수 있다. [ 참고사이트 ]



실행 결과



로그 로테이트

파일로 로그를 기록하고 있는데 특정 사이즈가 넘으면 자동으로 새로운 파일로 남기려 하는 경우가 있다. ( 로그 용량도 절대 무시할 수 없기 때문에... )

logging 모듈은 이러한 기능도 내장으로 제공해주고 있다.



파일의 최대 사이즈를 10MB로 제한하고, 최대 10개까지 백업을 가능하게 설정했다.



마치며

logging 모듈에는 더 다양한 핸들러들과 기능들이 존재하며 확장할 수 있는 방법도 다양하다. 이러한 기능들을 최대한 잘 사용하여 현재 진행중인 프로젝트에 최대한 많은 로그를 기록해두어야겠다.



참고사이트 : [ Python2.7 logging ]



0 Comments
댓글쓰기 폼