Browse Source

Add logger formater.

Cixo Develop 2 tuần trước cách đây
mục cha
commit
d7f0c96f36
1 tập tin đã thay đổi với 37 bổ sung24 xóa
  1. 37 24
      source/logger.py

+ 37 - 24
source/logger.py

@@ -1,42 +1,55 @@
+import time
+
 from .handler import handler
+from .levels import levels 
 
 class logger:
     def __init__(self) -> None:
         self.__handlers = set()
 
-    def _get_message(self, *args, **kwargs) -> str:
-        if len(kwargs) == 0:
-            return self.__get_message_from_args(self, *args)
+    def _get_message(self, level: levels, *args, **kwargs) -> str:
+        if len(args) < 1:
+            raise RuntimeError("Message or message format is not specified.")
+
+        return (
+            self.__level_name(level) + " " + \
+            self.time_stamp + " " + \
+            self.__formater(*args, **kwargs
+        )
+
+    @property
+    def time_stamp(self) -> str:
+        now = time.localtime()
+        formated = time.strftime("%Y-%m-$d %H:%M:%S")
+        
+        return formated
 
-        if len(args) != 1:
-            raise RuntimeError("You must specify output format.")
+    def __level_name(self, level: levels) -> str:
+        name = ""
 
-        return self.__get_message_from_kwargs(self, args[0], **kwargs)
+        if level == levels.info:
+            name = "info"
 
-    def __get_message_from_args(self, *args) -> str:
-        line = ""
+        if level == levels.warning:
+            name = "warning"
 
-        for count in args:
-            typed = type(count)
+        if level == levels.error:
+            name = "error"
 
-            if typed is str:
-                line = line + count + " "
-                continue
-            
-            if typed is int or typed is float or typed is bool:
-                line = line + str(count) + " "
-                continue
+        if level == levels.critical:
+            name = "CRITICAL"
 
-            line = line + repr(count) + " "
+        return ("[" + name + "]")
 
-        if len(args) > 0:
-            line = line[0:-1]
+    def __formater(self, *args, **kwargs) -> str:
+        base = args[0]
+        args = args[1:]
 
-        return line
+        if len(args) == 0 and len(kwargs) == 0:
+            return base
+        
+        return base.format(*args, **kwargs)
 
-    def __get_message_from_kwargs(self, formation: str, **kwargs) -> str:
-        return formation.format(**kwargs)   
-    
     def use_handler(self, target: handler) -> None:
         self.__handlers.add(target)