112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
import sys
|
|
import logging
|
|
import colorlog
|
|
from typing import Optional
|
|
|
|
|
|
# 강화된 컬러 로깅 설정
|
|
def setup_logging():
|
|
# 루트 로거 설정
|
|
root_logger = logging.getLogger()
|
|
root_logger.setLevel(logging.INFO)
|
|
|
|
# 기존 핸들러 제거 (중복 방지)
|
|
for handler in root_logger.handlers[:]:
|
|
root_logger.removeHandler(handler)
|
|
|
|
# 컬러 콘솔 핸들러 생성
|
|
console_handler = colorlog.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(logging.INFO)
|
|
|
|
# 컬러 포맷터 설정
|
|
color_formatter = colorlog.ColoredFormatter(
|
|
"%(log_color)s%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
datefmt='%Y-%m-%d %H:%M:%S',
|
|
log_colors={
|
|
'DEBUG': 'cyan',
|
|
'INFO': 'green',
|
|
'WARNING': 'yellow',
|
|
'ERROR': 'red',
|
|
'CRITICAL': 'red,bg_white',
|
|
},
|
|
secondary_log_colors={},
|
|
style='%'
|
|
)
|
|
console_handler.setFormatter(color_formatter)
|
|
|
|
# 핸들러 추가
|
|
root_logger.addHandler(console_handler)
|
|
|
|
# FastAPI/uvicorn 로거 설정
|
|
logging.getLogger("uvicorn").setLevel(logging.INFO)
|
|
logging.getLogger("uvicorn.access").setLevel(logging.INFO)
|
|
logging.getLogger("fastapi").setLevel(logging.INFO)
|
|
|
|
# 애플리케이션 로거들 설정
|
|
logging.getLogger("analysis").setLevel(logging.INFO)
|
|
logging.getLogger("analysis.application").setLevel(logging.INFO)
|
|
logging.getLogger("analysis.application.analysis_service").setLevel(logging.INFO)
|
|
|
|
# 로깅 설정 완료 메시지
|
|
logger = logging.getLogger(__name__)
|
|
logger.info("✅ 컬러 로깅 설정 완료")
|
|
|
|
|
|
def get_colored_logger(
|
|
name: str,
|
|
level: int = logging.INFO,
|
|
format_string: Optional[str] = None
|
|
) -> logging.Logger:
|
|
"""
|
|
컬러 로거를 가져오는 함수
|
|
|
|
Args:
|
|
name: 로거 이름
|
|
level: 로깅 레벨
|
|
format_string: 커스텀 포맷 문자열
|
|
|
|
Returns:
|
|
설정된 컬러 로거
|
|
"""
|
|
|
|
# 기본 포맷 설정
|
|
if format_string is None:
|
|
format_string = (
|
|
"%(log_color)s%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
)
|
|
|
|
# 컬러 포맷터 생성
|
|
color_formatter = colorlog.ColoredFormatter(
|
|
format_string,
|
|
datefmt='%Y-%m-%d %H:%M:%S',
|
|
log_colors={
|
|
'DEBUG': 'cyan',
|
|
'INFO': 'green',
|
|
'WARNING': 'yellow',
|
|
'ERROR': 'red',
|
|
'CRITICAL': 'red,bg_white',
|
|
},
|
|
secondary_log_colors={},
|
|
style='%'
|
|
)
|
|
|
|
# 로거 생성
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(level)
|
|
|
|
# 이미 핸들러가 있으면 기존 로거 반환
|
|
if logger.handlers:
|
|
return logger
|
|
|
|
# 콘솔 핸들러 생성
|
|
console_handler = colorlog.StreamHandler()
|
|
console_handler.setFormatter(color_formatter)
|
|
console_handler.setLevel(level)
|
|
|
|
# 핸들러 추가
|
|
logger.addHandler(console_handler)
|
|
|
|
# 상위 로거로 전파 방지
|
|
logger.propagate = False
|
|
|
|
return logger |