역시 무슨 일이 벌어지는지 알기 위해선 필요한 로그를 남겨놔야 한다.
간단한 로깅 클래스를 만들고 봇의 로깅이 필요한 곳에 추가했다.
1. 부가 클래스 작성
class types(Enum):
INFO = 1
ERROR = 2
DEBUG = 3
UNKNOWN = 4
class Colors:
BLACK = '[\033[30m'
RED = '[\033[31m'
GREEN = '[\033[32m'
YELLOW = '[\033[33m'
BLUE = '[\033[34m'
MAGENTA = '[\033[35m'
CYAN = '[\033[36m'
WHITE = '[\033[37m'
UNDERLINE = '[\033[4m'
RESET = '\033[0m]'
먼저 enum클래스와 컬러링을 위한 Colors 클래스를 만들었다.
색상 지정은 아래의 이미지에 나와있는 대로 ANSI 표준을 참고해 지정하면 된다. 1
\033[ 으로 시작하는 문자열은 ANSI의 이스케이프 시퀀스를 따르는 예약문자이다.
이에 관한 설명은 여기에서 확인할 수 있다. 2
2. 로깅 클래스 작성
class Logger:
#Loggin function
def writeLog(lTypes, content):
# Set Korean Timezone
KST = timezone('Asia/Seoul')
today = datetime.now()
today = today.astimezone(KST)
lt = None
# Coloring strings
if(lTypes == types.INFO.value):
lt = Colors.BLUE + types.INFO.name + Colors.RESET
elif(lTypes == types.ERROR.value):
lt = Colors.RED + types.ERROR.name + Colors.RESET
elif(lTypes == types.DEBUG.value):
lt = Colors.GREEN + types.DEBUG.name + Colors.RESET
elif(lTypes == types.UNKNOWN.value):
lt = Colors.YELLOW + types.UNKNOWN.name + Colors.RESET
# Print log on terminal
print(f'[{today}]', end=" ")
print('{type:<19} {str}'.format(type = lt, str = content))
내가 봇을 올려둔 클라우드는 UTC로 시간을 표현하기 때문에 이를 한국 시간에 맞춰 표현할 수 있게 해야 했다.
로깅 타입에 따라 다른 색상을 사용해 표현하고, 구분감을 위해 적당히 빈칸도 넣어줬다.
파이썬은 switch문이 없더라... 「if ... elif」로 다 작성했다.
공식에서도 이걸 권장하는 듯 하다
3. 로깅 확인
시간대 출력, 로그 구분, 색상, 정렬 모든 게 만족스럽게 잘 된다.
enum 관련해서 if문 돌리는 쪽은 내가 너무 무식한 방식으로 만든 것 같긴 한데...
일단은 이만 하면 충분한 듯하다.
Reference
'Study > Python' 카테고리의 다른 글
[Python / GPT] 봇 코드 리팩터링 (0) | 2023.05.17 |
---|---|
[Python, AWS] csv에서 DynamoDB에로의 교체 (0) | 2023.05.10 |
[Python] 봇에 Epoch Converter 추가 (0) | 2023.03.29 |
[Python] 디스코드 봇에 환율 확인 기능 추가 (0) | 2023.02.12 |
[Python] 봇의 명령어 실행 결과를 csv 형식으로 저장하기 (0) | 2023.01.22 |