안녕세계
[Python] stream 및 file에 로그 남기기 (logging) 본문
[Python] stream 및 file에 로그 남기기 (logging)
Junhong Kim 2019. 1. 12. 00:37파이썬 표준 라이브러리인 logging
을 활용하여 로그를 남기는 방법에 대해 알아봅니다.
[방법1] stream에 로그 남기기
- 스트림(콘솔)에 로그를 찍기 위해 logging을 사용합니다.
import logging
logging.info('my INFO log')
logging.warning('my WARNING log')
# WARNING:root:my WARNING log
위 코드를 실행하면 warning level
만 출력되는 이유?
- logging의 default log level이 warning으로 되어있기 때문입니다.
다음 처럼 logging의 basicConfig level
을 변경하면 됩니다.
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('my DEBUG log')
logging.info('my INFO log')
logging.warning('my WARNING log')
logging.error('my ERROR log')
logging.critical('my CRITICAL log')
# DEBUG:root:my DEBUG log
# INFO:root:my INFO log
# WARNIG:root:my WARNING log
# ERROR:root:my ERROR log
# CRITICAL:root:my CRITICAL log
[방법2] file에 로그 남기기
- basicConfig의 filename을 설정하면 해당 위체 로그 파일이 생성됩니다.
- 해당 파일을 열어보면 log가 append 되는 것을 확인할 수 있습니다.
import logging
logging.basicConfig(filename='./server.log', level=logging.DEBUG)
logging.debug('my DEBUG log')
logging.info('my INFO log')
logging.warning('my WARNING log')
logging.error('my ERROR log')
logging.critical('my CRITICAL log')
# DEBUG:root:my DEBUG log
# INFO:root:my INFO log
# WARNIG:root:my WARNING log
# ERROR:root:my ERROR log
# CRITICAL:root:my CRITICAL log
# servevr.log
DEBUG:root:my DEBUG log
INFO:root:my INFO log
WARNIG:root:my WARNING log
ERROR:root:my ERROR log
CRITICAL:root:my CRITICAL log
[방법3] stream과 file에 동시에 로그 남기기
1. logging.getLogger(__name__)으로 logger instance를 생성합니다.
2. stream과 file에 로그를 남기는 handler를 생성합니다.
3. logger instance에 stream과 file handler를 설정합니다.
4. logger instance로 log를 찍습니다.
import logging
# logger instance 생성
logger = logging.getLogger(__name__)
# handler 생성 (stream, file)
streamHandler = logging.StreamHandler()
fileHandler = logging.FileHandler('./server.log')
# logger instance에 handler 설정
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)
# logger instance로 log 찍기
logger.setLevel(level=logging.DEBUG)
logger.debug('my DEBUG log')
logger.info('my INFO log')
logger.warning('my WARNING log')
logger.error('my ERROR log')
logger.critical('my CRITICAL log')
로그 형식(formatting)
import logging
import logging.handlers
# logger instance 생성
logger = logging.getLogger(__name__)
# formatter 생성
formatter = logging.Formatter('[%(asctime)s][%(levelname)s|%(filename)s:%(lineno)s] >> %(message)s')
# handler 생성 (stream, file)
streamHandler = logging.StreamHandler()
fileHandler = logging.FileHandler('./server.log')
# logger instance에 fomatter 설정
streamHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# logger instance에 handler 설정
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)
# logger instnace로 log 찍기
logger.setLevel(level=logging.DEBUG)
logger.debug('my DEBUG log')
logger.info('my INFO log')
logger.warning('my WARNING log')
logger.error('my ERROR log')
logger.critical('my CRITICAL log')
formatter를 적용하면 다음과 같이 출력되는 것을 확인하실 수 있습니다.
(더 다양한 포맷은 여기에서 확인하실 수 있습니다.)
[2019-01-12 00:11:01,045][DEBUG|test.py:24] >> my DEBUG log
[2019-01-12 00:11:01,046][INFO|test.py:25] >> my INFO log
[2019-01-12 00:11:01,046][WARNING|test.py:26] >> my WARNING log
[2019-01-12 00:11:01,046][ERROR|test.py:27] >> my ERROR log
[2019-01-12 00:11:01,046][CRITICAL|test.py:28] >> my CRITICAL log
로그 파일이 커질때 파일 분할
- 파일을 분할하기 위해서는 fileHandler
설정을 변경하면 됩니다.
- maxBytes: 파일 하나의 최대 바이트 수
- backupCount: 백업 파일 개수
(더 다양한 핸들러는 여기에서 확인하실 수 있습니다.)
import logging
# 100MB 파일을 10개까지 남기겠다라는 의미입니다.
fileMaxByte = 1024 * 1024 * 100
fileHandler = logging.handlers.RotatingFileHandler(filename, maxBytes=fileMaxByte, backupCount=10)
References
http://gyus.me/?p=418
'Language > Python' 카테고리의 다른 글
[Python] list에서 dictionary 정렬 (0) | 2019.01.13 |
---|---|
[Python] list.sort()와 sorted(list) 차이 (1) | 2019.01.12 |
[Python] 랜덤 문자열 생성 (0) | 2019.01.11 |
[Python] list에서 dictionary 속성 검색 (0) | 2019.01.10 |
[Python] Object 속성 확인 (0) | 2019.01.09 |