[파이썬 Python] 로깅 logging
2020. 12. 24. 18:24ㆍpython
728x90
반응형
logging
1. 사용 이유
보통 처음 개발을 시작한다면 print 함수를 쓸것이다.
logging 모듈은 파이썬 자체에 내장되어 있는 모듈로 사용이 간편하고 강력하다.
사용방법은 4번 부터 보면 된다.
2. level
logging 모듈은 중요도를 level로 구분한다.
- DEBUG - 간단한 문제
- INFO - 확인 메시지, 정보
- WARNING - 잘 작동은 하나 예상치 못한 일이 발생 했거나 예측될때
- ERROR - 큰 문제로 몇몇 기능을 수행하지 못할때
- CRITICAL - 작동이 불가능한 수준의 심각한 에러
3. logging flow
logger, handler, filter, formatter 가 있다.
Logger: 어플리케이션 코드가 직접 사용할 수 있는 인터페이스를 제공.
Handler: logger에 의해 만들어진 log를 적합한 위치로 보낸다.
Filter: 어떤 log가 출력되어야 하는지를 결정.
Formatter: log의 최종 출력되는 레이아웃을 결정.
4. 사용법
1. 로깅을 위해 필요한 모듈을 import 한다.
import logging
2. 인스턴스(instance) logger를 생성한다.
logger = logging.getLogger('name')
3. logger level 부여
이중 원하는 수준의 level로 써주면 된다.
DEBUG로 설정하면 그아래 모든 level이 출력된다.
INFO로 설정하면 DEBUG를 제외한 그아래 모든 level이 출력된다.
logger.setLevel(logging.DEBUG)
logger.setLevel(logging.INFO)
logger.setLevel(logging.WARNIG)
logger.setLevel(logging.ERROR)
logger.setLevel(logging.CRITICAL)
5. handler 과 formatter
formatter
log 가 어떠한 형식으로 찍힐 것인지 포맷을 결정한다.
원하는 형식으로 짜면된다.
logging.Formatter(
fmt = None, # 메시지 출력 형태. None일 경우 raw 메시지를 출력.
datefmt = None, # 날짜 출력 형태. None일 경우 '%Y-%m-%d %H:%M:%S'.
style = '%' # '%', '{', '$' 중 하나. `fmt`의 style을 결정.
)
formatter = logging.Formatter(fmt = '%(asctime)s %(levelname)s %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S')
속성이름 | format | 설명 |
created | %(created)f | 시간 표시 |
filename | %(filename)s | pathname 의 file이름 부분 |
funcName | %(funcName)s | logging call 포함하는 fuction의 이름 |
levelname | %(levelname)s | logging level (ex.DEBUG) |
lineno | %(lineno)d | logging call 발생한 코드의 line number |
module | %(module)s | file module 이름 |
message | %(message)s | 메시지 |
name | %(name)s | logger 이름 |
pathname | %(pathname)s | 파일 path |
thread | %(thread)d | thread ID |
threadName | %(threadName)s | thread 이름 |
handler
# 오늘 날짜를 찍어주어 로그 파일명을 오늘 날짜로 만들어 주기 위해
now = datetime.datetime.now().isoformat()[:10]
logfile_name = f'{now}.log'
# formatter 객체 생성
formatter = logging.Formatter(fmt="%(asctime)s | %(levelname)s | %(message)s")
# handler 객체 생성
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandler(filename=logfile_name)
# handler에 level 설정
stream_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)
# handler에 format 설정
stream_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger에 생성한 handler 추가하기
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
반응형
'python' 카테고리의 다른 글
OrderedDict vs defaultdict vs dict (0) | 2021.01.03 |
---|---|
[파이썬 python] 딕셔너리 ditionary (0) | 2020.12.16 |
[파이참 PyCharm] 단축키 (0) | 2020.12.15 |
[파이썬 python] print(), sep='', end='' (0) | 2020.12.09 |
plt.plot 한글 폰트 깨짐 현상 (0) | 2020.08.03 |