파이썬에는 기본적인 logging 모듈을 제공합니다.
아래는 logging 모듈의 기본 개념과 사용법을 정리하였습니다.
기본적인 파일 내 로그 출력 방법
import logging
import submodule
# 'myrootlogger' 이름의 로거 생성
logger = logging.getLogger('myrootlogger')
logger.setLevel(logging.DEBUG)
# 로깅 파일 핸들러
file_handler = logging.FileHandler('loghere.log')
logger.addHandler(file_handler)
logger.info('logging - info')
logger.debug('logging - debug')
logging 모듈을 import 하고 getLogger 를 이용해 로거를 생성할 수 있습니다.
FileHadler로 로그을 저장할 파일이름을 설정하고, addHander을 이용해 logger에 핸들러를 추가합니다.
그리고 logger.info, logger.debug를 이용해 메시지를 남깁니다.
상단의 코드를 실행하면 loghere.log 파일에 두 가지의 메시지가 생성됨을 확인할 수 있습니다.
logger.setLevel은 로그 레벨을 설정합니다.
로그 레벨은 DEBUG < INFO < WARNING < ERROR < CRITICAL 순서 이며, 낮을 수록 더 많은 메시지를 생성합니다.
위에는 DEBUG로 설정되어 있지만, INFO로 설정하면 logger.debug 메시지가 출력되지 않습니다.
import logging
import submodule
# 'myrootlogger' 이름의 로거 생성
logger = logging.getLogger('myrootlogger')
logger.setLevel(logging.INFO) # INFO로 로그레벨 변경
# 로깅 파일 핸들러
file_handler = logging.FileHandler('loghere2.log')
logger.addHandler(file_handler)
logger.info('logging - info')
logger.debug('logging - debug')
loghere2.log에 출력된 결과.
파일과 콘솔에 동시에 출력하는 방법
python logging 모듈에서는 핸들러를 여러 개 등록할 수 있습니다.
파일 핸들러를 등록했던 방식과 동일하게 스트림 핸들러를 등록하면 콘솔에도 메시지를 표시할 수 있습니다.
import logging
import submodule
# 'myrootlogger' 이름의 로거 생성
logger = logging.getLogger('myrootlogger')
logger.setLevel(logging.DEBUG) # INFO로 로그레벨 변경
# 로깅 파일 핸들러
file_handler = logging.FileHandler('loghere2.log')
logger.addHandler(file_handler)
# 콘솔에 로깅하기 위한 스트림 핸들러 추가
stream_hander = logging.StreamHandler()
logger.addHandler(stream_hander)
logger.info('logging - stream&file hander - info')
logger.debug('logging - stream&file hander - debug')
실행 결과
로깅 포멧을 설정하는 방법
로깅할 때 시간, 모듈 이름 등의 기본적인 정보를 함께 출력할 수 있습니다.
if __name__ == '__main__':
import logging
import submodule
# 'myrootlogger' 이름의 로거 생성
logger = logging.getLogger('myrootlogger')
logger.setLevel(logging.DEBUG) # INFO로 로그레벨 변경
# 로깅 파일 핸들러
file_handler = logging.FileHandler('loghere_format.log')
# logging format을 생성하고 file handler에 추가한다.
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 콘솔에 로깅하기 위한 스트림 핸들러 추가
stream_hander = logging.StreamHandler()
logger.addHandler(stream_hander)
logger.info('logging - stream&file hander - info')
logger.debug('logging - stream&file hander - debug')
위에서 Formatter에 시간, 로거 이름, 레벨 등을 먼저 표시하고 메시지를 표시하는 형식을 정의했습니다.
그리고 file handler의 setFormatter 메소드로 포멧을 추가합니다.
logger_format.log 파일에 아래와 같이 기록됩니다.
하지만 콘솔에는 포멧 정보는 표시되지 않습니다.
'통계, 개발, 데이타 > Python' 카테고리의 다른 글
파이썬(python) cProfile 사용법 (0) | 2021.07.06 |
---|---|
파이썬(python) multiprocessing (0) | 2021.07.03 |
댓글