Skip to content

Commit

Permalink
add colors to log
Browse files Browse the repository at this point in the history
  • Loading branch information
DerGoogler committed Feb 16, 2025
1 parent 2ae33dd commit d28ad95
Showing 1 changed file with 24 additions and 26 deletions.
50 changes: 24 additions & 26 deletions sync/utils/Log.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
from pathlib import Path
from typing import Optional, Dict, Union

class ColoredFormatter(logging.Formatter):
COLORS = {
logging.DEBUG: "\033[36m",
logging.INFO: "\033[32m",
logging.WARNING: "\033[33m",
logging.ERROR: "\033[31m",
"RESET": "\033[0m"
}

def format(self, record):
color = self.COLORS.get(record.levelno, self.COLORS["RESET"])
record.levelname = f"{color}{record.levelname}{self.COLORS['RESET']}"
return super().format(record)

class Log:
_logger_initialized: dict = {}
Expand All @@ -14,13 +27,8 @@ class Log:

def __init__(self, tag: str, *, enable_log: bool = True, log_dir: Optional[Path] = None):
if log_dir is not None:
if self._file_prefix is None:
prefix = tag.lower()
else:
prefix = self._file_prefix

log_file = f"{prefix}_{date.today()}.log"
log_file = log_dir.joinpath(log_file)
prefix = tag.lower() if self._file_prefix is None else self._file_prefix
log_file = log_dir.joinpath(f"{prefix}_{date.today()}.log")
self.clear(log_dir, prefix)
else:
log_file = None
Expand All @@ -43,7 +51,7 @@ def i(self, msg: str):
self.log(level=logging.INFO, msg=msg)

def w(self, msg: str):
self.log(level=logging.WARN, msg=msg)
self.log(level=logging.WARNING, msg=msg)

def e(self, msg: str):
self.log(level=logging.ERROR, msg=msg)
Expand All @@ -69,13 +77,7 @@ def set_enable_stdout(cls, value: bool):
@classmethod
def set_log_level(cls, level: Union[int, str]):
levels = cls.levels()

if isinstance(level, str):
level = levels.get(level, logging.DEBUG)
elif isinstance(level, int) and level not in levels.values():
level = logging.DEBUG

cls._log_level = level
cls._log_level = levels.get(level, logging.DEBUG) if isinstance(level, str) else level

@classmethod
def clear(cls, log_dir: Path, prefix: str, max_num: int = 3):
Expand All @@ -85,13 +87,6 @@ def clear(cls, log_dir: Path, prefix: str, max_num: int = 3):
log_file.unlink()

@classmethod
def get_msg(cls, err: BaseException) -> str:
msg = "{} " * len(err.args)
msg = msg.format(*err.args).rstrip()
return f"{err.__class__.__name__}({msg})"

@classmethod
@functools.lru_cache()
def get_logger(cls, name: str = "root", log_file: Optional[Path] = None, log_level: int = logging.DEBUG):
logger = logging.getLogger(name)
if name in cls._logger_initialized:
Expand All @@ -100,9 +95,10 @@ def get_logger(cls, name: str = "root", log_file: Optional[Path] = None, log_lev
if name.startswith(logger_name):
return logger

formatter = logging.Formatter(
formatter = ColoredFormatter(
"[%(asctime)s] %(name)s %(levelname)s: %(message)s",
datefmt="%Y/%m/%d %H:%M:%S")
datefmt="%Y/%m/%d %H:%M:%S"
)

if cls._enable_stdout:
stdout_handler = logging.StreamHandler(stream=sys.stdout)
Expand All @@ -117,9 +113,11 @@ def get_logger(cls, name: str = "root", log_file: Optional[Path] = None, log_lev

if log_file is not None:
log_file.parent.mkdir(parents=True, exist_ok=True)

file_handler = logging.FileHandler(log_file, "a")
file_handler.setFormatter(formatter)
file_handler.setFormatter(logging.Formatter(
"[%(asctime)s] %(name)s %(levelname)s: %(message)s",
datefmt="%Y/%m/%d %H:%M:%S"
))
logger.addHandler(file_handler)

logger.setLevel(log_level)
Expand Down

0 comments on commit d28ad95

Please sign in to comment.