|
|
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)
|
|
|
|
|
|
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)
|
|
|
|