| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import os |
| import sys |
|
|
|
|
| class Color: |
| RED = "\033[91m" |
| YELLOW = "\033[93m" |
| WHITE = "\033[97m" |
| GREEN = "\033[92m" |
| RESET = "\033[0m" |
|
|
|
|
| LOG_LEVELS = {"ERROR": 0, "WARN": 1, "INFO": 2, "DEBUG": 3} |
|
|
| COLOR_MAP = {"ERROR": Color.RED, "WARN": Color.YELLOW, "INFO": Color.WHITE, "DEBUG": Color.GREEN} |
|
|
|
|
| def get_env_log_level(): |
| level = os.environ.get("DA3_LOG_LEVEL", "INFO").upper() |
| return LOG_LEVELS.get(level, LOG_LEVELS["INFO"]) |
|
|
|
|
| class Logger: |
| def __init__(self): |
| self.level = get_env_log_level() |
|
|
| def log(self, level_str, *args, **kwargs): |
| level_key = level_str.split(":")[0].strip() |
| level_val = LOG_LEVELS.get(level_key) |
| if level_val is None: |
| raise ValueError(f"Unknown log level: {level_str}") |
| if self.level >= level_val: |
| color = COLOR_MAP[level_key] |
| msg = " ".join(str(arg) for arg in args) |
|
|
| |
| |
| tag = level_key |
| if tag in ("INFO", "WARN"): |
| tag += " " |
| print( |
| f"{color}[{tag}] {msg}{Color.RESET}", |
| file=sys.stderr if level_key == "ERROR" else sys.stdout, |
| **kwargs, |
| ) |
|
|
| def error(self, *args, **kwargs): |
| self.log("ERROR:", *args, **kwargs) |
|
|
| def warn(self, *args, **kwargs): |
| self.log("WARN:", *args, **kwargs) |
|
|
| def info(self, *args, **kwargs): |
| self.log("INFO:", *args, **kwargs) |
|
|
| def debug(self, *args, **kwargs): |
| self.log("DEBUG:", *args, **kwargs) |
|
|
|
|
| logger = Logger() |
|
|
| __all__ = ["logger"] |
|
|
| if __name__ == "__main__": |
| logger.info("This is an info message") |
| logger.warn("This is a warning message") |
| logger.error("This is an error message") |
| logger.debug("This is a debug message") |
|
|