Cixo Develop 1 周之前
父節點
當前提交
eacaf532c1
共有 2 個文件被更改,包括 105 次插入26 次删除
  1. 24 10
      source/async_logger.py
  2. 81 16
      source/logger.py

+ 24 - 10
source/async_logger.py

@@ -3,20 +3,34 @@ from .handler import handler
 from .logger import logger
 
 class async_logger(logger):
-    async def info(self, *args, **kwargs) -> None:
-        await self.log(levels.info, *args, **kwargs)
+    """
+    That is logger, which use async methods to save data into handles.
 
-    async def warning(self, *args, **kwargs) -> None:
-        await self.log(levels.warning, *args, **kwargs)
+    Methods
+    -------
+    async info(content, *args, **kwargs)
+        That log info level message.
 
-    async def error(self, *args, **kwargs) -> None:
-        await self.log(levels.error, *args, **kwargs)
+    async warning(content, *args, **kwargs)
+        
+    """
 
-    async def critical(self, *args, **kwargs) -> None:
-        await self.log(levels.critical, *args, **kwargs)
+    async def info(self, content: str, *args, **kwargs) -> None:
+        await self.log(levels.info, content, *args, **kwargs)
 
-    async def log(self, level: levels, *args, **kwargs) -> None:
-        await self._write_to_all(self._get_message(level, *args, **kwargs))
+    async def warning(self, content: str, *args, **kwargs) -> None:
+        await self.log(levels.warning, content, *args, **kwargs)
+
+    async def error(self, content: str, *args, **kwargs) -> None:
+        await self.log(levels.error, content, *args, **kwargs)
+
+    async def critical(self, content: str, *args, **kwargs) -> None:
+        await self.log(levels.critical, content, *args, **kwargs)
+
+    async def log(self, level: levels, content: str, *args, **kwargs) -> None:
+        await self._write_to_all(
+            self._get_message(level, content, *args, **kwargs)
+        )
     
     async def _write_to_all(self, content: str) -> None:
         for handler in self._get_handlers():

+ 81 - 16
source/logger.py

@@ -4,30 +4,95 @@ from .handler import handler
 from .levels import levels 
 
 class logger:
+    """
+    That class is responsible for managing log handlers, and generating
+    log message. That formats log messages by adding time, date and also
+    level of the message.
+    """
+
     def __init__(self) -> None:
+        """
+        That initialize handlers set.
+        """
+
         self.__handlers = set()
 
     def _get_handlers(self) -> tuple:   
+        """
+        That returns copy of the handlers list.
+        """
+
         return tuple(self.__handlers)
 
-    def _get_message(self, level: levels, *args, **kwargs) -> str:
-        if len(args) < 1:
-            raise RuntimeError("Message or message format is not specified.")
+    def _get_message(
+        self, 
+        level: levels, 
+        content: str, 
+        *args, 
+        **kwargs
+    ) -> str:
+        """
+        That try to format log message. It require level of the message and 
+        also message itself. When it get only level and message itself, that
+        only add message to level and timestamp info. When more parameters
+        had been given that run format function on the first message. It is
+        useable when log message must contain for example IP address or
+        other things like that.
+
+        Parameters
+        ----------
+        level : levels
+            Log level of the message.
+
+        content : str
+            Content of the message to log.
+        
+        *args, **kwargs
+            Optional arguments used when format would be used.
+
+        Returns
+        -------
+        str
+            Result message which would be saved in the logs.
+        """
+
+        if len(args) > 0 or len(kwargs) > 0:
+            content = content.format(*args, **kwargs)
 
         return ( \
             self.__level_name(level) + " " + \
             self.time_stamp + " " + \
-            self.__formater(*args, **kwargs) \
+            content \
         )
 
     @property
     def time_stamp(self) -> str:
-        now = time.localtime()
-        formated = time.strftime("%Y-%m-%d %H:%M:%S")
-        
-        return formated
+        """
+        That return current time as timestamp to use in log message.
+
+        Returns
+        -------
+        str
+            Current time as timestamp.
+        """
+
+        return time.strftime("%Y-%m-%d %H:%M:%S")
 
     def __level_name(self, level: levels) -> str:
+        """
+        That convert level enum value into level stamp.
+
+        Parameters
+        ----------
+        level : levels
+            Level enum to convert.
+
+        Returns
+        -------
+        str
+            Result as string stamp.
+        """
+
         name = ""
 
         if level == levels.info:
@@ -44,16 +109,16 @@ class logger:
 
         return ("[" + name + "]")
 
-    def __formater(self, *args, **kwargs) -> str:
-        base = args[0]
-        args = args[1:]
+    def use_handler(self, target: handler) -> None:
+        """
+        That add new handler to the handlers set.
 
-        if len(args) == 0 and len(kwargs) == 0:
-            return base
-        
-        return base.format(*args, **kwargs)
+        Parameters
+        ----------
+        target : handler
+            New handler to add.
+        """
 
-    def use_handler(self, target: handler) -> None:
         self.__handlers.add(target)