from abc import ABC, abstractmethod
class LogLevel:
DEBUG = 0
INFO = 1
WARNING = 2
ERROR = 3
class BaseLogger(ABC):
@abstractmethod
def log(self, level: int, message: str) -> None:
...
class Logger(BaseLogger):
def __init__(self, name: str, level: int = LogLevel.INFO):
self._name = name
self._level = level
def log(self, level: int, message: str) -> None:
if level >= self._level:
print(f"[{self._name}] {message}")
def info(self, message: str) -> None:
self.log(LogLevel.INFO, message)
def error(self, message: str) -> None:
self.log(LogLevel.ERROR, message)
@classmethod
def create(cls, name: str) -> "Logger":
cls.validate_name(name)
return cls(name)
@classmethod
def validate_name(cls, name: str) -> None:
if not name:
raise ValueError("Logger name must not be empty")