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 |
---|