diff --git a/docs/change_logs/0-4.md b/docs/change_logs/0-4.md index bed721b..418e5a2 100644 --- a/docs/change_logs/0-4.md +++ b/docs/change_logs/0-4.md @@ -6,7 +6,7 @@ - `Outstream` - `FileCacheOutputStream` - 现在如果输入的文件名包含 `{time}` - - 会自动替换为 `time.strftime("%Y-%m-%d|%H-%M-%S")` + - 会自动替换为 `time.strftime("%Y-%m-%d_%H-%M-%S")` ## Nuitka Compiler Helper diff --git a/src/lib_not_dr/loggers/config.py b/src/lib_not_dr/loggers/config.py index 854fefb..e024ee0 100644 --- a/src/lib_not_dr/loggers/config.py +++ b/src/lib_not_dr/loggers/config.py @@ -86,7 +86,11 @@ class ConfigStorage(Options): return sorted(cycles_set) # 返回排序后的循环列表 def parse_level(self, level_config: dict) -> Optional[int]: - """ """ + """ + Parse level config + :param level_config: + :return: + """ level_found: Tuple[Optional[int], Optional[str]] = ( level_config.get("level"), level_config.get("level_name"), @@ -273,19 +277,20 @@ class ConfigStorage(Options): for logger_name, config in logger_config.items(): # get output for logger if "outputs" in config: - if self.outputs.get(config["outputs"]) is None: - if self.fail_outputs.get(config["outputs"]) is None: - self.log.error( - f'Logger {logger_name} output {config["output"]} not found, ignored' - ) + for i, output_name in enumerate(config["outputs"]): + if self.outputs.get(output_name) is None: + if self.fail_outputs.get(output_name) is None: + self.log.error( + f'Logger {logger_name} output {output_name} not found, ignored' + ) + else: + self.log.error( + f'Logger {logger_name} require a fail output {output_name}, ignored' + ) + env.fail_loggers[logger_name] = config + continue else: - self.log.error( - f'Logger {logger_name} require a fail output {config["output"]}, ignored' - ) - env.fail_loggers[logger_name] = config - continue - else: - config["outputs"] = self.outputs[config["outputs"]] + config["outputs"][i] = self.outputs[output_name] if level := self.parse_level(config) is not None: config["level"] = level if "level_name" in config: diff --git a/src/lib_not_dr/loggers/formatter/__init__.py b/src/lib_not_dr/loggers/formatter/__init__.py index e60d87f..7d3fac7 100644 --- a/src/lib_not_dr/loggers/formatter/__init__.py +++ b/src/lib_not_dr/loggers/formatter/__init__.py @@ -75,10 +75,11 @@ class BaseFormatter(Options): elif isinstance(template, str): template = Template(template) + print(message, info, template) try: - return template.substitute(**info) + return template.substitute(info) except (KeyError, ValueError): - return template.safe_substitute(**info) + return template.safe_substitute(info) def _format(self, message: FormattingMessage) -> FormattingMessage: """ diff --git a/src/lib_not_dr/loggers/formatter/colors.py b/src/lib_not_dr/loggers/formatter/colors.py index 3342b68..b86a4fb 100644 --- a/src/lib_not_dr/loggers/formatter/colors.py +++ b/src/lib_not_dr/loggers/formatter/colors.py @@ -44,6 +44,8 @@ class BaseColorFormatter(BaseFormatter): } def get_color(self, message: FormattingMessage) -> str: + if message[0].level in self.color: + return self.color[message[0].level] for level in self.color: if message[0].level <= level: break diff --git a/src/lib_not_dr/loggers/logger.py b/src/lib_not_dr/loggers/logger.py index efc0c42..b940f39 100644 --- a/src/lib_not_dr/loggers/logger.py +++ b/src/lib_not_dr/loggers/logger.py @@ -103,17 +103,17 @@ class Logger(Options): output.level = level def make_log( - self, - messages: Union[list, tuple], - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - level: int = 20, # info - # log_time: Optional[float] = None, - # logger_name: str = 'root', - # logger_tag: Optional[str] = None, - stack_trace: Optional[FrameType] = None, + self, + messages: Union[list, tuple], + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + level: int = 20, # info + # log_time: Optional[float] = None, + # logger_name: str = 'root', + # logger_tag: Optional[str] = None, + stack_trace: Optional[FrameType] = None, ) -> None: # 检查是否需要记录 if not self.log_for(level): @@ -133,7 +133,7 @@ class Logger(Options): stack_trace = stack message = LogMessage( - messages=messages, # type: ignore + messages=messages, # type: ignore end=end, split=split, flush=flush, @@ -153,13 +153,13 @@ class Logger(Options): # 20231106 00:06 def info( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.info): return @@ -174,13 +174,13 @@ class Logger(Options): ) def trace( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.trace): return @@ -195,13 +195,13 @@ class Logger(Options): ) def fine( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.fine): return @@ -216,13 +216,13 @@ class Logger(Options): ) def debug( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.debug): return @@ -237,13 +237,13 @@ class Logger(Options): ) def warn( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.warn): return @@ -258,13 +258,13 @@ class Logger(Options): ) def error( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.error): return @@ -279,13 +279,13 @@ class Logger(Options): ) def fatal( - self, - *message, - tag: Optional[str] = None, - end: str = "\n", - split: str = " ", - flush: bool = True, - stack_trace: Optional[FrameType] = None, + self, + *message, + tag: Optional[str] = None, + end: str = "\n", + split: str = " ", + flush: bool = True, + stack_trace: Optional[FrameType] = None, ) -> None: if not self.log_for(LogLevel.fatal): return diff --git a/src/lib_not_dr/loggers/outstream.py b/src/lib_not_dr/loggers/outstream.py index 596df56..35f689d 100644 --- a/src/lib_not_dr/loggers/outstream.py +++ b/src/lib_not_dr/loggers/outstream.py @@ -115,7 +115,7 @@ class FileCacheOutputStream(BaseOutputStream): flush_timer: Optional[threading.Timer] = None file_path: Path = Path("./logs") - # if contain {time} -> time.strftime("%Y-%m-%d %H-%M-%S", time.gmtime(time.time) + # if contain {time} -> time.strftime("%Y-%m-%d_%H-%M-%S", time.gmtime(time.time) file_name: str # file mode: always 'a' file_encoding: str = "utf-8" @@ -144,7 +144,7 @@ class FileCacheOutputStream(BaseOutputStream): # 初始化文件名 if "{time}" in self.file_name: self.file_name = self.file_name.format(time=time.strftime( - "%Y-%m-%d|%H-%M-%S", time.gmtime(self.file_start_time) + "%Y-%m-%d_%H-%M-%S", time.gmtime(self.file_start_time) )) # 初始化缓存 if self.text_cache is None: