Language/Python
파이썬 로깅( logging) 사용하기 -1 : 출력 / 파일 / 포맷
jvvp512
2020. 8. 14. 20:14
728x90
logging
-
logging 모듈은 표준 라이브러리 모듈이다.
-
이 모듈은 응용 프로그램과 라이브러리를 위한 유연한 이벤트 로깅 시스템을 구현하는 함수와 클래스를 정의한다.
예제 1
기본적으로 출력하는 예제입니다.
로깅 레벨에 따라 출력되는 것과 안되는 것을 구분할 수 있습니다.
import logging
if __name__ == '__main__':
logging.debug('debug print')
logging.info('info print')
logging.warn('warning print')
logging.error('error print')
logging.critical('critical print')
WARNING:root:warning print
ERROR:root:error print
CRITICAL:root:critical print
예제 2
로거 객체를 생성해서 setLevel() 함수를 통해 레벨을 지정하고 핸들러는 콘솔출력 StreamHandler 를 추가해주었습니다.
로거 객체 생성 > 핸들러 객체 생성 > 로거 객체에 핸들러 추가
import logging
if __name__ == '__main__':
logger = logging.getLogger('jvvp')
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
logger.debug('debug print')
logger.info('info print')
logger.warn('warn print')
logger.error('error print')
logger.critical('critical print')
debug print
info print
warn print
error print
critical print
예제 3
로그파일을 생성하는 FileHandler 를 사용해보겠습니다.
로거객체에 경로명을 인자로 주어서 생성한 FileHandler 객체를 addHandler() 함수를 통해 추가해주었습니다.
로거 객체 생성 > 출력 핸들러 객체 생성 > 로거 객체에 핸들러 추가
import logging
if __name__ == '__main__':
logger = logging.getLogger("jvvp")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler('jvvp_file.log')
logger.addHandler(file_handler)
logger.debug('debug print')
logger.info('info print')
logger.warn('warn print')
logger.error('error print')
logger.critical('critical print')
여러 핸들러를 추가하는 것도 가능합니다.
import logging
if __name__ == '__main__':
logger = logging.getLogger("jvvp")
logger.setLevel(logging.INFO)
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandler('jvvp_file.log')
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.debug('debug print')
logger.info('info print')
logger.warn('warn print')
logger.error('error print')
logger.critical('critical print')
info print
warn print
error print
critical print
예제 4
출력 포맷을 지정하는 것을 알아보겠습니다.
정의한 포맷으로 생성한 Formatter 객체를 핸들러의 setFormatter() 함수를 통해 지정해줄 수있습니다.
로거 객체 생성 > 출력 핸들러 객체 생성 > 포맷 지정 > 로거 객체에 핸들러 추가
import logging
if __name__ == '__main__':
logger = logging.getLogger("jvvp")
logger.setLevel(logging.INFO)
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.debug('debug print')
logger.info('info print')
logger.warn('warn print')
logger.error('error print')
logger.critical('critical print')
2020-08-14 20:08:07 - jvvp - INFO - info print
2020-08-14 20:08:07 - jvvp - WARNING - warn print
2020-08-14 20:08:07 - jvvp - ERROR - error print
2020-08-14 20:08:07 - jvvp - CRITICAL - critical print
자세한 어트리뷰트 리스트는 다음과 같습니다.
참고