Logger Class
모델을 돌리며 터미널의 출력들을 txt 또는 log 파일로 저장하고 싶으면서, 동시에 터미널에서도 실시간으로 확인하고 싶을 때 Logger class를 사용하면 된다.
내가 사용하는 Logger 코드는 다음과 같다.
class Logger(object):
def __init__(self):
td = datetime.datetime.now(timezone('Asia/Seoul'))
file_name = td.strftime('%m-%d_%H.%M') + ".log"
self.terminal = sys.stdout
self.log = open(file_name, "a")
def write(self, temp):
self.terminal.write(temp)
self.log.write(temp)
def flush(self):
pass
"""main"""
sys.stdout = Logger() #main 첫부분에 써주기
print("print this")
model = ...
log 파일 명에 날짜와 시/분, 모델의 중요한 hyperparameter들을 추가해주는 편이다.
위 코드처럼 datetime을 사용하려면 import datetime을 해주어야 한다.
로깅 모듈도 따로 있긴 하지만, 나는 사용하지 않아서(..) 아래 링크 참고하면 된다.
https://docs.python.org/ko/3/library/logging.html
logging — 파이썬 로깅 시설 — Python 3.10.4 문서
logging — 파이썬 로깅 시설 소스 코드: Lib/logging/__init__.py 이 모듈은 응용 프로그램과 라이브러리를 위한 유연한 이벤트 로깅 시스템을 구현하는 함수와 클래스를 정의합니다. 표준 라이브러리
docs.python.org
Timezone -> Seoul
Datetime 사용 시 timezone을 서울로 변경하는 방법
변경하지 않으면 기본 UTC 시간 (영국시간)을 기준으로 시간이 표시된다.
import datetime
from pytz import timezone
#datetime object 생성 시 timezone을 인자로 넘겨줌
td = datetime.datetime.now(timezone('Asia/Seoul'))
#그리고 생성된 datetime 사용하면 됨
time_str = td.strftime('%m-%d_%H.%M')
datetime, timezone import 후 위와 같이 datetime object를 생성해주면 된다!
'python' 카테고리의 다른 글
[CUDA] cuda 정리하기 (0) | 2022.05.27 |
---|---|
[warning] Leaking Caffe2 thread-pool after fork 해결하기 (0) | 2022.05.27 |
[pycharm] debugger- collecting data 에러 (0) | 2022.05.27 |
[에러] RuntimeError: CUDA error: device-side assert triggered (0) | 2022.05.20 |
[python] os.mkdirs 에러 (0) | 2022.03.31 |