본문 바로가기

공부/Python

[Python] logging 을 활용하여 log파일 남기기

728x90
반응형

logging 라이브어리를 사용하여 로그를 찍는방법을 알아보겠습니다.

기존에는 print() 를 사용했지만 파일로 기록하기 위해 logging 을 사용해 보겠습니다.'

 


logging  사용법은

    1. logger 객체 생성

    2. log formatter 생성

    3. handler 생성 + formatter 등록

    4. logger 객체에 handler 등록

 


logger 객체 생성

 

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

 


formatter 생성

 

formatter는 출력할 내용을 만들어 줍니다.

 

formatter = logging.Formatter(u'%(asctime)s [%(levelname)8s] %(message)s')

 

formatter keywords 입니다.

 

이름 포멧 설명
asctime %(asctime)s 날짜 시간, ex) 2021.04.10 11:21:48,162
created %(created)f 생성 시간 출력
filename %(filename)s 파일명
funcnName %(funcName)s 함수명
levelname %(levelname)s 로그 레벨(DEBUG, INFO, WARNING, ERROR, CRITICAL)
levelno %(levelno)s 로그 레벨을 수치화해서 출력(10, 20, 30, …)
lineno %(lineno)d 소스의 라인 넘버
module %(module)s 모듈 이름
msecs %(msecs)d 로그 생성 시간에서 밀리세컨드 시간 부분만 출력
message %(message)s 로그 메시지
name %(name)s 로그 이름
pathname %(pathname)s 소스 경로
process %(process)d 프로세스(Process) ID
processName %(processName)s 프로세스 이름
thread %(thread)d Thread ID
threadName %(threadName)s Thread Name

 



○ handler 생성 + formatter 등록

handler에 따라서 어디에 출력할지 지정을 해줍니다.

 

Handler 설명
StreamingHandler 콘솔창에 출력
FileHandler 지정파일에 출력
RotatingFileHandler 지정한 파일 크기만큼 파일에 출력
SocketHandler 외부 로그 서버로 소켓을 통해 전송
DatagramHandler UDP 통신을 통해 외부 서버로 전송
SysLogHandler Unix 류의 syslog 데몬에게 로그 전송
SMTPHandler 메일로 로그 전송
HTTPHandler HTTP를 통해 로그 전송

 

handler 예시입니다.

 

# StreamHandler
streamingHandler = logging.StreamHandler()
streamingHandler.setFormatter(formatter)


# FileHandler
file_handler = logging.FileHandler('./logs/output.log')
file_handler.setFormatter(formatter)


# RotatingFileHandler
log_max_size = 10 * 1024 * 1024  ## 10MB
log_file_count = 20
rotatingFileHandler = logging.handlers.RotatingFileHandler(
    filename='./logs/output.log',
    maxBytes=log_max_size,
    backupCount=log_file_count
)
rotatingFileHandler.setFormatter(formatter)


# RotatingFileHandler
timeFileHandler = logging.handlers.TimedRotatingFileHandler(
    filename='./logs/output.log',
    when='midnight',
    interval=1,
    encoding='utf-8'
)
timeFileHandler.setFormatter(formatter)

 

file로 로그를 남길경우 해당 폴더 경로가 없는경우 오류가 발생합니다.

 


 

logger 객체에 handler 등록 후 사용법

이제 만든 handler 를 추가하고 사용하면 됩니다.

 

logger.addHandler(streamingHandler)

logger.debug("debug logging")

 

handler는 여러개 등록이 가능합니다.

 

logger.addHandler(streamingHandler)
logger.addHandler(timeFileHandler)

logger.debug("debug logging")

 

출력 결과입니다.

 

2021-04-13 10:37:27,941 [   DEBUG] debug logging

 

각자 맞는 로그 형태로 생성해서 사용하면 되겠습니다.

728x90
반응형

'공부 > Python' 카테고리의 다른 글

[Python] Configparser 사용법( File properties )  (0) 2021.04.09