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.
 
 

79 lines
2.5 KiB

import os
import logging
from logging.handlers import RotatingFileHandler
# COLORED_FORMAT = '%(asctime)-15s [%(levelname)s] %(threadName)-12s '
# NORMAL_FORMAT = '%(filename)s %(funcName)s, line %(lineno)s: %(message)s'
COLORED_FORMAT = '[%(levelname)s] %(threadName)-12s '
NORMAL_FORMAT = '%(message)s' # '%(filename)s %(funcName)s, line %(lineno)s: %(message)s'
FORMAT = COLORED_FORMAT + NORMAL_FORMAT
class ColoredFormatter(logging.Formatter):
grey = "\x1b[38;20m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
white = "\x1b[33;97m"
green = "\x1b[33;92m"
reset = "\x1b[0m"
FORMATS = {
logging.DEBUG: white + COLORED_FORMAT + reset + NORMAL_FORMAT,
logging.INFO: green + COLORED_FORMAT + reset + NORMAL_FORMAT,
logging.WARNING: yellow + COLORED_FORMAT + reset + NORMAL_FORMAT,
logging.ERROR: red + COLORED_FORMAT + reset + NORMAL_FORMAT,
logging.CRITICAL: bold_red + COLORED_FORMAT + reset + NORMAL_FORMAT
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt, datefmt='%Y-%m-%d %I:%M:%S%p')
return formatter.format(record)
def set_log_folder(path: str):
dir = os.path.dirname(path)
if len(dir) == 0:
dir = "./"
os.makedirs(dir, exist_ok=True)
def set_logger(name: str = "fds", filename: str = "main.log", level: str = "info", logtest=False):
set_log_folder(filename)
logging_levels = (
logging.CRITICAL,
logging.ERROR,
logging.WARNING,
logging.INFO,
logging.DEBUG,
)
log_level = getattr(logging, level.upper())
assert log_level in logging_levels
log = logging.getLogger(name)
log.setLevel(log_level)
file_handler = RotatingFileHandler(filename, maxBytes=100000000, backupCount=10)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(FORMAT))
log.addHandler(file_handler)
stream_handler = logging.StreamHandler()
# stream_handler.setLevel(log_level)
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(ColoredFormatter())
log.addHandler(stream_handler)
if logtest:
t_log = getattr(log, level)
t_log(f"Logging level: {level.upper()}")
log.info("You can see below log labels")
log.debug("DEBUG level")
log.info("INFO level")
log.warning("WARNING level")
log.error("ERROR level")
log.critical("CRITICAL level")
return log