Welcome! 🙋‍♂️ View more

Engineering 💻/Python

[Python] logging 사용법과 클래스화

DeepFlame 2022. 3. 11. 18:00

Python에는 print라는 기능이 있다. 보통은 이 기능을 통해서 output을 확인한다. 

그러나 print로는 output을 확인할 수 없는 경우가 있다. 필자는  airflow의 에러 로그가 print로는 확인되지 않아 logging 모듈을 활용했다. 
logging에서는 print보다 좀 더 다양한 기능을 제공하니, 한 번 알아보도록 하자! 😀

 

1. logging 모듈


먼저 logging 모듈에 대해서 알아보자

 

1. log 출력 기준 

log가 출력되는 기준을 설정합니다.

출력 기준을 ERROR로 두게 된다면 그 아래 수준인 DEBUG/INFO/WARNING을 출력되지 않는다.

 

2. log 출력 형식

  • asctime: 일자를 나타냅니다.
  • levelname: 출력 수준을 나타냅니다.
  • message: 출력 내용을 나타냅니다.

출력 결과

 

3. log 출력 / 파일에 출력

  • StreamHandler: 콘솔에 출력합니다.
  • FileHandler: 파일로 출력합니다.

 

 

2. Logger 클래스화


많은 python 파일에서 작업하다보면 그때마다 Logger를 정의하는 것이 비효율적으로 느껴질 때가 있다. 그래서 클래스로 정의하고, 필요할 때마다 불러왔다.

 

출력 결과

코드를 확인해보면 두 가지 특징이 있다. 

1. if len(self.logger.handlers) == 0

handler에 계속해서 logging을 등록하게 되면 중복으로 로그를 출력할 가능성이 있다. 이를 방지하기 위해서 추가된 코드이다. 

2. self.file_name = os.path.basename(file)

로그를 출력하는 파일명을 확인하고 싶었다. 그래서 추가한 코드이다.

 

 

 

참고
https://stickode.tistory.com/209
https://minimin2.tistory.com/41