Skip to content

[기능] 로깅 시스템 중앙화 #172

@kkyungseo

Description

@kkyungseo

기능 설명 (Description)

  • Lang2SQL 프로젝트 전체에서 중앙화된 로깅 시스템을 구축하여 로깅 설정의 중복과 불일치 문제를 해결합니다. 기존에 5개 파일에서 각각 logging.basicConfig()를 호출하던 것을 중앙화된 모듈에서 한 번만 설정하도록 개선하고, 모든 모듈이 동일한 로깅 포맷과 설정을 공유할 수 있는 개선된 기능을 제시합니다.

왜 필요한가요? (Motivation / Use Case)

  • 중복 호출 문제: cli/utils/logger.py, db_utils/logger.py, infra/monitoring/check_server.py, infra/observability/token_usage.py, infra/db/connect_db.py에서 각각 logging.basicConfig()를 중복 호출하여 불필요한 오버헤드 발생
  • 포맷 불일치: 각 파일마다 다른 로깅 포맷을 사용하여 로그 일관성 부족
  • 유지보수의 어려움: 로깅 설정 변경 시 여러 파일을 수정해야 하는 번거로움
  • 디버깅의 어려움: 로그에서 어느 모듈에서 발생한 것인지 식별하기 어려움

제안하는 해결 방법 (Proposed Implementation)

  • 중앙화된 로깅 모듈 생성: infra/logging/centralized_logger.py에서 모든 로깅 설정을 관리
  • 통일된 포맷 적용: "%(asctime)s [%(levelname)s] %(name)s: %(message)s" 포맷으로 모든 로그 통일
  • 중복 방지 메커니즘: 전역 변수 _logging_configured로 중복 설정 방지
  • 환경변수 지원: LOG_LEVEL 환경변수로 로깅 레벨 동적 조정 가능
  • 기존 파일 수정: 모든 기존 파일에서 logging.basicConfig() 제거하고 get_logger(__name__) 사용

대안 (Alternatives)

  • 기존 logging 모듈 활용: Python 표준 logging 모듈의 설정 파일(logging.conf) 사용할 수 있을 것이라 예상됨
  • 외부 라이브러리 도입: structlog, loguru 등 고급 로깅 라이브러리 사용
  • 점진적 마이그레이션: 기존 코드를 유지하면서 새로운 모듈에만 중앙화된 로깅 적용하는 점진적 방식 활용

추가 고려사항 (Additional Context)

  • 성능: 중복 logging.basicConfig() 호출 제거로 초기화 오버헤드 감소
  • 확장성: 향후 파일 로깅, JSON 로깅, 로그 로테이션 등 추가 기능 확장
  • 테스트: 로깅 설정이 중앙화되어 테스트 시 로깅 레벨 조정

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions