from pybricks.tools import StopWatch class Logger: def __init__(self, verboseness=7): self.time = StopWatch() self.time.pause() self.verboseness = verboseness self.lvldict = { 0: "FATAL", 1: "ALERT", 2: "CRIT", 3: "ERR", 4: "WARNING", 5: "NOTICE", 6: "INFO", 7: "DEBUG" } def start(self): self.time.reset() self.time.resume() def log(self, message, level, origin): if level <= self.verboseness: ms = self.time.time() timestamp = "{:02d}:{:02d}.{:03d}".format( (ms // 60000) % 60, (ms // 1000) % 60, ms % 1000 ) label = self.lvldict.get(level, "UNKNOWN") padding = " " * (7 - len(label)) print("[{}] {}{} [{}] {}".format(timestamp, label, padding, origin, message)) def fatal(self, message, origin): self.log(message, 0, origin) def alert(self, message, origin): self.log(message, 1, origin) def crit(self, message, origin): self.log(message, 2, origin) def err(self, message, origin): self.log(message, 3, origin) def warning(self, message, origin): self.log(message, 4, origin) def notice(self, message, origin): self.log(message, 5, origin) def info(self, message, origin): self.log(message, 6, origin) def debug(self, message, origin): self.log(message, 7, origin) def crash(self, message, origin): self.log(message, 0, origin) raise FatalLoggerError("[FATAL] [{}] {}".format(origin, message))