import logging import os from datetime import datetime from pathlib import Path import pytz class CoreCFG: PROJECT_NAME = "BE" BOT_NAME = str("BE") def get_date_time(): return datetime.now(pytz.timezone("Asia/Ho_Chi_Minh")) DATE_TIME = get_date_time().date() BASE_DIR = os.path.dirname(Path(__file__).parent.parent) LOG_DIR = os.path.join(BASE_DIR, "logs") class CustomFormatter(logging.Formatter): green = "\x1b[0;32m" grey = "\x1b[38;5;248m" yellow = "\x1b[38;5;229m" red = "\x1b[31;20m" bold_red = "\x1b[31;1m" blue = "\x1b[38;5;31m" white = "\x1b[38;5;255m" reset = "\x1b[38;5;15m" base_format = f"{grey}%(asctime)s | %(name)s | %(threadName)s | {{level_color}}%(levelname)-8s{grey} | {blue}%(module)s:%(lineno)d{grey} - {white}%(message)s" FORMATS = { logging.INFO: base_format.format(level_color=green), logging.WARNING: base_format.format(level_color=yellow), logging.ERROR: base_format.format(level_color=red), logging.CRITICAL: base_format.format(level_color=bold_red), } def format(self, record): log_fmt = self.FORMATS.get(record.levelno) formatter = logging.Formatter(log_fmt) return formatter.format(record) def custom_logger(app_name="APP"): logger_r = logging.getLogger(name=app_name) # Set the timezone to Ho_Chi_Minh tz = pytz.timezone("Asia/Ho_Chi_Minh") logging.Formatter.converter = lambda *args: datetime.now(tz).timetuple() ch = logging.StreamHandler() ch.setLevel(logging.INFO) ch.setFormatter(CustomFormatter()) logger_r.setLevel(logging.INFO) logger_r.addHandler(ch) return logger_r logger = custom_logger(app_name=CoreCFG.PROJECT_NAME)