File size: 2,018 Bytes
0eb03b6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import os
import logging
import colorama
from logging.handlers import RotatingFileHandler
from typing_extensions import Literal
# Inisialisasi colorama untuk support ANSI di Windows
colorama.init()
log_level = Literal[
"CRITICAL",
"ERROR",
"WARNING",
"INFO",
"DEBUG",
]
def get_logging_level(level: str) -> int:
levels = {
"CRITICAL": logging.CRITICAL,
"ERROR": logging.ERROR,
"WARNING": logging.WARNING,
"INFO": logging.INFO,
"DEBUG": logging.DEBUG,
}
return levels.get(level.upper(), logging.INFO)
class ColorFormatter(logging.Formatter):
LEVEL_COLORS = {
logging.DEBUG: colorama.Fore.BLUE,
logging.INFO: colorama.Fore.GREEN,
logging.WARNING: colorama.Fore.YELLOW,
logging.ERROR: colorama.Fore.RED,
logging.CRITICAL: colorama.Fore.LIGHTRED_EX,
}
RESET = colorama.Style.RESET_ALL
def format(self, record):
color = self.LEVEL_COLORS.get(record.levelno, self.RESET)
record.levelname = f"{color}{record.levelname}{self.RESET}"
return super().format(record)
def setup_logger(
log_level: log_level | str = "INFO", save_logs: bool = False
) -> logging.Logger:
logger = logging.getLogger("qwen_api")
logger.propagate = False
if logger.handlers:
logger.handlers.clear()
logger.setLevel(get_logging_level(log_level))
base_format = "[%(levelname)s] %(asctime)s - %(name)s -> %(message)s"
# Handler untuk console
console_handler = logging.StreamHandler()
console_handler.setFormatter(ColorFormatter(base_format))
logger.addHandler(console_handler)
# Handler untuk file
if save_logs:
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
file_handler = RotatingFileHandler(
f"{log_dir}/qwen.log", maxBytes=5 * 1024 * 1024, backupCount=3
)
file_handler.setFormatter(logging.Formatter(base_format))
logger.addHandler(file_handler)
return logger
|