|
@@ -1,81 +1,18 @@
|
|
|
-import time
|
|
|
|
|
-import pathlib
|
|
|
|
|
-
|
|
|
|
|
-from .levels import levels
|
|
|
|
|
from .handler import handler
|
|
from .handler import handler
|
|
|
|
|
|
|
|
-class logger(handler):
|
|
|
|
|
- def __init__(self, log_file: pathlib.Path | None) -> None:
|
|
|
|
|
- super().__init__(log_file)
|
|
|
|
|
-
|
|
|
|
|
- self.__debug = False
|
|
|
|
|
- self.__time_stamp_format = "%d-%m-%Y %H:%M:%S "
|
|
|
|
|
-
|
|
|
|
|
- self.__minimum_stdout = levels.critical.value
|
|
|
|
|
- self.__minimum_stderr = levels.warning.value
|
|
|
|
|
- self.__minimum_file = levels.warning.value
|
|
|
|
|
-
|
|
|
|
|
- async def info(self, *args, **kwargs) -> None:
|
|
|
|
|
- await self.log(levels.info, *args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- async def warning(self, *args, **kwargs) -> None:
|
|
|
|
|
- await self.log(levels.warning, *args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- async def error(self, *args, **kwargs) -> None:
|
|
|
|
|
- await self.log(levels.error, *args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- async def critical(self, *args, **kwargs) -> None:
|
|
|
|
|
- await self.log(levels.critical, *args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- async def log(self, level: levels, *args, **kwargs) -> None:
|
|
|
|
|
- value = level.value
|
|
|
|
|
- content = self.__generate(*args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- if value >= self.__minimum_stdout or self.debug:
|
|
|
|
|
- await self._to_stdout(content)
|
|
|
|
|
-
|
|
|
|
|
- if value >= self.__minimum_stderr or self.debug:
|
|
|
|
|
- await self._to_stderr(content)
|
|
|
|
|
-
|
|
|
|
|
- if value >= self.__minimum_file or self.debug:
|
|
|
|
|
- await self._to_file(content)
|
|
|
|
|
-
|
|
|
|
|
- def __generate(self, *args, **kwargs) -> str:
|
|
|
|
|
- if len(kwargs) > 0:
|
|
|
|
|
- return self.__generate_from_kwargs(*args, **kwargs)
|
|
|
|
|
-
|
|
|
|
|
- if len(args) > 0:
|
|
|
|
|
- return self.__generate_from_args(*args)
|
|
|
|
|
-
|
|
|
|
|
- raise RuntimeError("Can not log empty message.")
|
|
|
|
|
-
|
|
|
|
|
- def __generate_from_kwargs(self, *args, **kwargs) -> str:
|
|
|
|
|
- if len(args) != 1 or type(args[0]) is not str:
|
|
|
|
|
- RuntimeError("Can not log with format, when format is not given.")
|
|
|
|
|
-
|
|
|
|
|
- return self.time_stamp + args[0].format(**kwargs)
|
|
|
|
|
-
|
|
|
|
|
- def __generate_from_args(self, *args) -> str:
|
|
|
|
|
- mapper = lambda count: count if type(count) is str else repr(count)
|
|
|
|
|
- mapped = map(mapper, args)
|
|
|
|
|
-
|
|
|
|
|
- return self.time_stamp + str(", ").join(mapped)
|
|
|
|
|
-
|
|
|
|
|
- @property
|
|
|
|
|
- def time_stamp(self) -> str:
|
|
|
|
|
- return time.strftime(self.__time_stamp_format, time.localtime())
|
|
|
|
|
|
|
+class logger:
|
|
|
|
|
+ def __init__(self) -> None:
|
|
|
|
|
+ self.__handlers = set()
|
|
|
|
|
|
|
|
- def set_time_stamp(self, target: str) -> None:
|
|
|
|
|
- self.__time_stamp_format = target
|
|
|
|
|
|
|
+ def _on_all(self, content: str) -> None:
|
|
|
|
|
+ for handler in self.__handlers:
|
|
|
|
|
+ handler(content)
|
|
|
|
|
|
|
|
- @property
|
|
|
|
|
- def debug(self) -> bool:
|
|
|
|
|
- return self.__debug
|
|
|
|
|
-
|
|
|
|
|
- def start_debugging() -> None:
|
|
|
|
|
- self.__debug = True
|
|
|
|
|
|
|
+ async def _on_all_async(self, content: str) -> None:
|
|
|
|
|
+ for handler in self.__handlers:
|
|
|
|
|
+ await handler.add(content)
|
|
|
|
|
|
|
|
- def stop_debugging() -> None:
|
|
|
|
|
- self.__debug = False
|
|
|
|
|
|
|
+ def use_handler(self, target: handler) -> None:
|
|
|
|
|
+ self.__handlers.add(target)
|
|
|
|
|
|
|
|
|
|
|