python

[python] Logger class, timezone Seoul

jiheek 2022. 5. 27. 21:16

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를 생성해주면 된다!