Rename structers -> structures And add __init__ for LogMessage and StdFormatter

This commit is contained in:
shenjack 2023-11-05 13:32:31 +08:00
parent 33b8c4c7d6
commit 90726e5812
Signed by: shenjack
GPG Key ID: 7B1134A979775551
8 changed files with 130 additions and 66 deletions

View File

@ -6,7 +6,7 @@
import inspect
from lib_not_dr.logger.structers import LogMessage
from lib_not_dr.logger.structure import LogMessage
from lib_not_dr.logger.formatter import (StdFormatter,
TimeFormatter,
LevelFormatter,

View File

@ -9,7 +9,7 @@ from string import Template
from typing import List, Union, Optional, Dict, Tuple
from lib_not_dr.types.options import Options
from lib_not_dr.logger.structers import LogMessage, FormattingMessage
from lib_not_dr.logger.structure import LogMessage, FormattingMessage
class BaseFormatter(Options):
@ -202,6 +202,24 @@ class StdFormatter(BaseFormatter):
TraceColorFormatter(),
MessageColorFormatter()]
def __init__(self,
enable_color: bool = True,
sub_formatter: Optional[List[BaseFormatter]] = None,
color_formatters: Optional[List[BaseFormatter]] = None,
**kwargs) -> None:
"""
Initialize the StdFormatter
:param enable_color: enable color
:param sub_formatter: list of sub formatter
:param color_formatters: list of color formatter
:param kwargs: other options
"""
# 同 structures.LogMessage.__init__ 的注释 (逃)
super().__init__(enable_color=enable_color,
sub_formatter=sub_formatter,
color_formatters=color_formatters,
**kwargs)
def _format(self, message: FormattingMessage) -> FormattingMessage:
super()._format(message)

View File

@ -7,7 +7,7 @@
from typing import Dict, Tuple
from lib_not_dr.logger.formatter import BaseFormatter
from lib_not_dr.logger.structers import FormattingMessage
from lib_not_dr.logger.structure import FormattingMessage
__all__ = [

View File

@ -9,7 +9,7 @@ import inspect
from types import FrameType
from typing import List, Optional
from lib_not_dr.logger.structers import LogMessage
from lib_not_dr.logger.structure import LogMessage
from lib_not_dr.logger.outstream import BaseOutputStream
from lib_not_dr.types.options import Options

View File

@ -7,7 +7,7 @@
import sys
from lib_not_dr.types.options import Options
from lib_not_dr.logger.structers import LogMessage
from lib_not_dr.logger.structure import LogMessage
from lib_not_dr.logger.formatter import BaseFormatter, StdFormatter
__all__ = [
@ -21,6 +21,8 @@ class BaseOutputStream(Options):
level: int = 20
enable: bool = True
formatter: BaseFormatter
def write_stdout(self, message: LogMessage) -> None:
raise NotImplementedError(f'{self.__class__.__name__}.write_stdout is not implemented')
@ -60,3 +62,9 @@ class StdioOutputStream(BaseOutputStream):
print('', end='', flush=True)
print('', end='', flush=True, file=sys.stderr)
return None
class FileCacheOutputStream(BaseOutputStream):
name = 'FileCacheOutputStream'
formatter: BaseFormatter = StdFormatter(enable_color=False)

View File

@ -1,60 +0,0 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
import time
from types import FrameType
from typing import List, Optional, Tuple, Dict
from lib_not_dr.types.options import Options
__all__ = ['LogMessage',
'FormattingMessage']
class LogMessage(Options):
name = 'LogMessage'
# 消息内容本身的属性
messages: List[str] = []
end: str = '\n'
split: str = ' '
# 消息的属性
flush: bool = True
level: int = 20
log_time: float = None # time.time_ns()
logger_name: str = 'root'
logger_tag: Optional[str] = None
stack_trace: Optional[FrameType] = None
def init(self, **kwargs) -> bool:
if self.log_time is None:
self.log_time = time.time_ns()
return False
def format_message(self) -> str:
return self.split.join(self.messages) + self.end
def format_for_message(self) -> Dict[str, str]:
basic_info = self.option()
if self.logger_tag is None:
basic_info['logger_tag'] = ' '
basic_info['messages'] = self.format_message()
return basic_info
@property
def create_msec_3(self) -> int:
return int(self.log_time / 1000000) % 1000
FormattingMessage = Tuple[LogMessage, Dict[str, str]]
if __name__ == '__main__':
print(LogMessage().as_markdown())

View File

@ -0,0 +1,98 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
import time
from types import FrameType
from typing import List, Optional, Tuple, Dict
from lib_not_dr.types.options import Options
__all__ = ['LogMessage',
'FormattingMessage']
class LogMessage(Options):
name = 'LogMessage'
# 消息内容本身的属性
messages: List[str] = []
end: str = '\n'
split: str = ' '
# 消息的属性
flush: bool = True
level: int = 20
log_time: float = None # time.time_ns()
logger_name: str = 'root'
logger_tag: Optional[str] = None
stack_trace: Optional[FrameType] = None
def __init__(self,
messages: Optional[List[str]] = None,
end: Optional[str] = '\n',
split: Optional[str] = ' ',
flush: Optional[bool] = True,
level: Optional[int] = 20,
log_time: Optional[float] = None,
logger_name: Optional[str] = 'root',
logger_tag: Optional[str] = None,
stack_trace: Optional[FrameType] = None,
**kwargs) -> None:
"""
Init for LogMessage
:param messages: message list for log
:param end: end of message
:param split: split for messages
:param flush: do flush or not
:param level: level of message
:param log_time: time of message (default: time.time_ns())
:param logger_name: name of logger
:param logger_tag: tag of logger
:param stack_trace: stack trace of logger
:param kwargs: other options
"""
# 为了方便使用 单独覆盖了 __init__ 方法来提供代码补全的选项
super().__init__(messages=messages,
end=end,
split=split,
flush=flush,
level=level,
log_time=log_time,
logger_name=logger_name,
logger_tag=logger_tag,
stack_trace=stack_trace,
**kwargs)
def init(self, **kwargs) -> bool:
if self.log_time is None:
self.log_time = time.time_ns()
if not isinstance(self.flush, bool):
self.flush = True if self.flush else False
return False
def format_message(self) -> str:
return self.split.join(self.messages) + self.end
def format_for_message(self) -> Dict[str, str]:
basic_info = self.option()
if self.logger_tag is None:
basic_info['logger_tag'] = ' '
basic_info['messages'] = self.format_message()
return basic_info
@property
def create_msec_3(self) -> int:
return int(self.log_time / 1000000) % 1000
FormattingMessage = Tuple[LogMessage, Dict[str, str]]
if __name__ == '__main__':
print(LogMessage().as_markdown())

View File

@ -8,7 +8,7 @@ import inspect
import unittest
from lib_not_dr.logger.formatter import BaseFormatter, TimeFormatter, LevelFormatter, TraceFormatter
from lib_not_dr.logger.structers import LogMessage
from lib_not_dr.logger.structure import LogMessage
class FormatterTest(unittest.TestCase):