-
Python - Logging_1카테고리 없음 2019. 10. 25. 13:07반응형
Logging
- 프로그램의 상태를 외부로 출력하여 개발자가 확인할 수 있다.
Python에서 logging 모듈은 기본 라이브러리에 포함되어 있다.
Ex)
import logging
if __name__ == '__main__':
logging.error("something wrong!!")
로깅 레벨
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
Ex)
logging.info("hello world")
파이썬 로깅 디폴트 설정은 WARNING이다.
레벨순서: DEBUG<INFO<WARNING<ERROR<CRITICAL
실행결과: 상위레벨인 ERROR는 출력이 되지만, 하위레벨인 INFO, DEBUG는 출력이 되지 않는다.
즉 레벨을 DEBUG, INFO로 설정 한후에 사용하면 된다.
* 중요: print로 모든 로깅을 출력할 경우 실제 프로그램이 배포 될 때, 수많은 정보를 출력하게되어 프로그램 성능에
부담이 클 수 있다. 또한 출력을 파일로 할 경우 너무 커져 시스템이 멈출 수 있다.
로깅 - 로거 생성
----------------------------------------------------
import logging
if __name__ == '__main__':
mylogger = logging.getLogger("my")
-----------------------------------------------------
-> 'my' 로거를 생성한다.
로깅 - 레벨 설정
---------------------------------------------------
mylogger = logging.getLogger("my")
mylogger.setLevel(logging.INFO)
---------------------------------------------------
-> setLevel 메소드를 통해서 INFO 레벨 이상을 출력 할 수 있다.
레벨순서: DEBUG<INFO<WARNING<ERROR<CRITICAL
로깅 - 핸들러 설정
---------------------------------------------------------------
stream_handler = logging.StreamHandler()
mylogger.addHandler(stream_handler)
mylogger.info("server start")
---------------------------------------------------------------
결과: "server start"
Handler: 로깅결과를 출력하는 위치를 설정하는 것이다.
출력방식: File, DB, Socket, Queue
로깅 - 파일 핸들러 설정
-----------------------------------------------------------------
file_handler = logging.FileHandler('my.log')
mylogger.addHandler(file_handler)
mylogger.info("server start")
-----------------------------------------------------------------
-> logging.FileHandler 클래스를 통해 file_handler 객체를 생성하여 로거에 추가하였다.
실행결과: 소스 디렉토리에 'my.log'파일이 생성된다.
중요: 파일은 디폴트인 'a'모드로 열린다. 같은 이름의 파일이 존재할 경우 덧붙여 쓰여진다.
로깅 - 포매팅 설정
------------------------------------------------------
mylogger = logging.getLogger("my")
mylogger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
mylogger.addHandler(stream_handler)
file_handler = logging.FileHandler('my.log')
mylogger.addHandler(file_handler)
mylogger.info("server start")
-------------------------------------------------------
일반적인 로깅결과에 대해 추가적인 정보를 포매팅할 수 있다.
- asctime: 시간
- name: 로거이름
- levelname: 로깅레벨
- message: 메시지
* 중요: 이외에도 매뉴얼을 참고하여 더 많은 정보를 출력할 수 있다.
요약정리:
로거 객체생성 -> 로깅 레벨설정 -> 포매터 객체생성 -> 핸들러 객체생성 -> 실행
반응형