Study/Python

[Python] 로깅 클래스 추가

BVM 2023. 4. 3. 16:52

역시 무슨 일이 벌어지는지 알기 위해선 필요한 로그를 남겨놔야 한다.

간단한 로깅 클래스를 만들고 봇의 로깅이 필요한 곳에 추가했다.

 

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