mirror of https://github.com/Nezreka/SoulSync.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
class ColoredFormatter(logging.Formatter):
|
|
COLORS = {
|
|
'DEBUG': '\033[94m',
|
|
'INFO': '\033[92m',
|
|
'WARNING': '\033[93m',
|
|
'ERROR': '\033[91m',
|
|
'CRITICAL': '\033[95m',
|
|
'RESET': '\033[0m'
|
|
}
|
|
|
|
def format(self, record):
|
|
log_color = self.COLORS.get(record.levelname, self.COLORS['RESET'])
|
|
reset_color = self.COLORS['RESET']
|
|
|
|
record.levelname = f"{log_color}{record.levelname}{reset_color}"
|
|
return super().format(record)
|
|
|
|
def setup_logging(level: str = "INFO", log_file: Optional[str] = None) -> logging.Logger:
|
|
log_level = getattr(logging, level.upper(), logging.INFO)
|
|
|
|
logger = logging.getLogger("newmusic")
|
|
logger.setLevel(log_level)
|
|
|
|
if logger.handlers:
|
|
logger.handlers.clear()
|
|
|
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
console_handler.setLevel(log_level)
|
|
|
|
console_formatter = ColoredFormatter(
|
|
fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
)
|
|
console_handler.setFormatter(console_formatter)
|
|
logger.addHandler(console_handler)
|
|
|
|
if log_file:
|
|
log_path = Path(log_file)
|
|
log_path.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
file_handler = logging.FileHandler(log_path)
|
|
file_handler.setLevel(log_level)
|
|
|
|
file_formatter = logging.Formatter(
|
|
fmt='%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
)
|
|
file_handler.setFormatter(file_formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
logger.info(f"Logging initialized with level: {level}")
|
|
return logger
|
|
|
|
def get_logger(name: str) -> logging.Logger:
|
|
return logging.getLogger(f"newmusic.{name}")
|
|
|
|
main_logger = get_logger("main") |