Python Logging - Formatter 클래스 (2/3)
__init__ Method
파라미터로는 포맷 문자열(fmt), 날짜 포맷 문자열(datefmt), 스타일 문자열(style)을 받음
각 파라미터는 기본값이 있음
- style 파라미터의 기본값은
%이고, 해당하는 Style Class는PercentStyle임 - fmt 파라미터가 생략된 경우, Style Class의 Class 변수 중
default_format의 값으로 지정됨 - datefmt 파라미터를 생략할 경우,
formatTimeMethod에서 ISO8601(혹은 RFC 3339) 스타일의 포맷으로 지정됨
1 | def __init__(self, fmt=None, datefmt=None, style='%'): |
formatTime Method
LogRecord의 생성 시간을 포매팅된 문자열로 반환하는 메서드. formatter의 format() 메서드에서 호출됨.
- datefmt이 있으면, time.strftime()을 호출하여 해당 포맷으로 포매팅
datefmt이 없으면, ISO8601(혹은 RFC 3339) 스타일의 포맷으로 포매팅 (
%Y-%m-%d %H:%M:%S,%03d)time.localtime()가 사용됨. GMT를 원하는 경우,converterattribute를time.gmtime()으로 변경하면 됨.
1 | # converter의 위치는 여기가 아님. 설명을 위해 불러옴 |
formatException Method
exception 정보를 문자열로 포매팅하여 반환하는 메서드
traceback.print_exception()를 통해 Traceback 정보가 기록됨.
print_exception 함수가 file 파라미터에 (없으면 sys.stderr) Traceback 정보를 프린트하도록 되어 있어, io.StringIO()를 활용하여 문자열에 기록 후 getvalue()로 문자열 값을 반환한다. (단, 마지막이 줄바꿈 문자열이면 삭제함)
1 | def formatException(self, ei): |
usesTime Method
포맷 문자열에 생성 시간이 포함되어 있는지 확인하는 메서드
보통 스타일 Class에 정의되어있음. (PercentStyle 클래스의 경우, %(asctime) 문자열이 포함되어있는지 확인함.)
1 | def usesTime(self): |
(PercentStyle 클래스 예시)
1 | class PercentStyle(object): |