Spaces:
Runtime error
Runtime error
import platform | |
import logging | |
from datetime import datetime, timezone | |
# from https://github.com/FloatTech/ZeroBot-Plugin/blob/c70766a989698452e60e5e48fb2f802a2444330d/console/console_windows.go#L89-L96 | |
colorCodePanic = "\x1b[1;31m" | |
colorCodeFatal = "\x1b[1;31m" | |
colorCodeError = "\x1b[31m" | |
colorCodeWarn = "\x1b[33m" | |
colorCodeInfo = "\x1b[37m" | |
colorCodeDebug = "\x1b[32m" | |
colorCodeTrace = "\x1b[36m" | |
colorReset = "\x1b[0m" | |
log_level_color_code = { | |
logging.DEBUG: colorCodeDebug, | |
logging.INFO: colorCodeInfo, | |
logging.WARN: colorCodeWarn, | |
logging.ERROR: colorCodeError, | |
logging.FATAL: colorCodeFatal, | |
} | |
log_level_msg_str = { | |
logging.DEBUG: "DEBU", | |
logging.INFO: "INFO", | |
logging.WARN: "WARN", | |
logging.ERROR: "ERRO", | |
logging.FATAL: "FATL", | |
} | |
class Formatter(logging.Formatter): | |
def __init__(self, color=platform.system().lower() != "windows"): | |
# https://stackoverflow.com/questions/2720319/python-figure-out-local-timezone | |
self.tz = datetime.now(timezone.utc).astimezone().tzinfo | |
self.color = color | |
def format(self, record: logging.LogRecord): | |
logstr = "[" + datetime.now(self.tz).strftime('%z %Y%m%d %H:%M:%S') + "] [" | |
if self.color: | |
logstr += log_level_color_code.get(record.levelno, colorCodeInfo) | |
logstr += log_level_msg_str.get(record.levelno, record.levelname) | |
if self.color: | |
logstr += colorReset | |
logstr += f"] {str(record.name)} | {str(record.msg)}" | |
return logstr | |
def get_logger(name: str, lv = logging.INFO): | |
logger = logging.getLogger(name) | |
syslog = logging.StreamHandler() | |
syslog.setFormatter(Formatter()) | |
logger.setLevel(lv) | |
logger.addHandler(syslog) | |
return logger | |