본문 바로가기
통계, 개발, 데이타/Python

파이썬(python) 로깅하기 - import logging #1

by 참우럭아저씨 2021. 7. 10.
반응형

파이썬에는 기본적인 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

댓글