본문 바로가기
Programming/Backend

[python] GUI 앱 오류시 로그 남기기 - logger.py

by BitSense 2025. 1. 26.
import os
import traceback
from datetime import datetime

class Logger:
    """
    로그를 기록하는 유틸리티 클래스
    사용방법:
    1. 일반 로그 기록
        Logger.log("로그 메시지")
        예) Logger.log("사용자가 로그인했습니다")
    
    2. 예외 발생 시 로그 기록
        try:
            # 코드...
        except Exception as e:
            Logger.log("에러 메시지", error=e)
        예) Logger.log("데이터 처리 중 오류 발생", error=e)
    
    로그 파일 위치: ./logs/application_YYYY-MM-DD.log
    로그 형식: 
    - 일반 로그: [YYYY-MM-DD HH:MM:SS] 메시지
    - 에러 로그: [YYYY-MM-DD HH:MM:SS] 메시지
                 Exception: 에러메시지
                 Traceback: 스택트레이스
    """
    
    LOG_DIRECTORY = "logs"
    LOG_FILE_PREFIX = "application"

    @classmethod
    def setup(cls):
        # 로그 디렉토리가 없으면 생성
        if not os.path.exists(cls.LOG_DIRECTORY):
            os.makedirs(cls.LOG_DIRECTORY)

    @classmethod
    def log(cls, message, error=None):
        """
        로그를 파일에 기록하는 메서드
        
        Args:
            message (str): 기록할 로그 메시지
            error (Exception, optional): 예외 객체. 기본값은 None
        
        예시:
            Logger.log("작업 시작")
            try:
                some_function()
            except Exception as e:
                Logger.log("작업 실패", error=e)
        """
        cls.setup()
        
        # 오늘 날짜로 로그 파일명 생성
        today = datetime.now().strftime("%Y-%m-%d")
        log_file = f"{cls.LOG_DIRECTORY}/{cls.LOG_FILE_PREFIX}_{today}.log"
        
        # 현재 시간
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        try:
            with open(log_file, 'a', encoding='utf-8') as f:
                # 기본 메시지 작성
                f.write(f"[{timestamp}] {message}\n")
                
                # 에러가 있는 경우 에러 정보 작성
                if error:
                    f.write(f"Exception: {str(error)}\n")
                    f.write(f"Traceback:\n{traceback.format_exc()}\n")
                    
        except Exception as e:
            print(f"로그 작성 중 오류 발생: {str(e)}")

주요 로그 포인트 설명:

  • 애플리케이션 시작/종료 시점
  • 메인 윈도우 초기화 시점
  • URL 등록 시점
  • ManageSearchAdThread 시작 시점
  • 애플리케이션 종료 처리 시점
  • Mutex 체크 시점
  • 각종 예외 발생 시점

이렇게 로그를 추가하면 다음과 같은 이점이 있습니다:

  • 애플리케이션의 주요 동작 시점을 추적할 수 있습니다
  • 오류 발생 시 정확한 위치와 원인을 파악할 수 있습니다
  • 사용자의 주요 액션을 모니터링할 수 있습니다

필요한 경우 더 많은 로그 포인트를 추가하거나, 로그 레벨을 구분하여 더 상세한 로깅을 구현할 수 있습니다.

 

반응형