Tonic 's lesson learned


파이썬에서 로거를 사용하는 간단한 방법

3가지 개념 잡기

로거를 쓸 때, 언어에 상관없이 이 3가지 단어는 늘 등장합니다. 1.핸들러 2.포맷터 3.로거
우리가 일기를 쓸 때도 이 3가지는 꼭 필요합니다. 말도 안된다구요? 아래 예를 한 번 들어볼께요.

공책(핸들러)에 연필(로거)로 영어(포맷터) 일기를 쓴다고 했을 때,

핸들러(Handler)는 공책과 비슷합니다. 어디에 쓸지를 결정하는 것이죠. 가끔은 공책말고 스마트폰에 일기를 쓰기도 하지요? 이 때, 핸들러는 스마트폰이 됩니다. 파이썬은 이렇게 어디에 쓸지 결정하는 핸들러를 여러 종류 구비하고 있습니다. 파일에 기록하는 파일 핸들러, 입출력 스트림에 기록하는 스트림 핸들러, 네트워크 상에 기록하는 소켓 핸들러 등 다양한 종류가 있답니다. 여기를 가보면 어떤 핸들러가 있는지 구경할 수 있으니 한번 들러보세요.

포맷터(Formatter)는 로그를 어떤 형식(모양)으로 기록할지 정하는 거에요. ‘날짜-클래스명-시간’ 이렇게 일방적으로 정해져 있으면 얼마나 불편하겠어요. 로그는 남겼는데 나에게 필요한 정보가 없다면 그 로그는 남기나 마나 한 것이지요. 조금은 다르지만 포맷터의 이해가 어렵다면 일기를 쓸 때 어떤 언어로 쓸지 결정하는 모습을 상상해보세요. 한글로 쓰기도 하고, 때로는 공부를 위해 영어로 쓰기도 하죠. “난 영어로 쓸래”라고 결정하는 것처럼, “난 로그에 이런 형식과 내용으로 쓸래”라고 ‘포맷’을 미리 결정하는 것이죠.

로거(Logger)는 연필과 같아요. 어디에 쓸지, 어떤 형식으로 쓸지 결정했다면 이제 도구가 있어야겠죠?

이렇게 3가지 도구가 모여서 로그를 남기게 되는 것이랍니다. 파이썬에서는 이 3가지를 프로그래밍할 때 ‘포맷터 > 핸들러 > 로거’ 순서대로 설정을 해준답니다. 무슨말이냐면 포맷터를 만들어 -> 핸들러에 넣고 -> 그 핸들러를 로거에 넣은 후 사용하는 것이죠.

실제 코드는 아래를 참고하세요. : )


소스로 살펴보기

1. 로깅 라이브러리를 임포트 합니다.

import logging

2. 핸들러와 포맷터를 생성하고 핸들러에 포맷터를 설정해 줍니다.

self.handler = logging.StreamHandler()
self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  
self.handler.setFormatter(self.formatter)

3. 이제 로깅을 담당할 로거를 생성하고, 로깅할 레벨과 생성한 핸들러를 추가해 줍니다.

self.logger = logging.getLogger(__name__)
  
self.logger.setLevel(logging.DEBUG)  
self.logger.addHandler(self.handler)