Rename structers -> structures And add __init__ for LogMessage and StdFormatter
This commit is contained in:
parent
33b8c4c7d6
commit
90726e5812
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import inspect
|
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,
|
from lib_not_dr.logger.formatter import (StdFormatter,
|
||||||
TimeFormatter,
|
TimeFormatter,
|
||||||
LevelFormatter,
|
LevelFormatter,
|
||||||
|
@ -9,7 +9,7 @@ from string import Template
|
|||||||
from typing import List, Union, Optional, Dict, Tuple
|
from typing import List, Union, Optional, Dict, Tuple
|
||||||
|
|
||||||
from lib_not_dr.types.options import Options
|
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):
|
class BaseFormatter(Options):
|
||||||
@ -202,6 +202,24 @@ class StdFormatter(BaseFormatter):
|
|||||||
TraceColorFormatter(),
|
TraceColorFormatter(),
|
||||||
MessageColorFormatter()]
|
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:
|
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
||||||
super()._format(message)
|
super()._format(message)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
from typing import Dict, Tuple
|
from typing import Dict, Tuple
|
||||||
|
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter
|
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__ = [
|
__all__ = [
|
||||||
|
@ -9,7 +9,7 @@ import inspect
|
|||||||
from types import FrameType
|
from types import FrameType
|
||||||
from typing import List, Optional
|
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.logger.outstream import BaseOutputStream
|
||||||
from lib_not_dr.types.options import Options
|
from lib_not_dr.types.options import Options
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from lib_not_dr.types.options import Options
|
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
|
from lib_not_dr.logger.formatter import BaseFormatter, StdFormatter
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@ -21,6 +21,8 @@ class BaseOutputStream(Options):
|
|||||||
level: int = 20
|
level: int = 20
|
||||||
enable: bool = True
|
enable: bool = True
|
||||||
|
|
||||||
|
formatter: BaseFormatter
|
||||||
|
|
||||||
def write_stdout(self, message: LogMessage) -> None:
|
def write_stdout(self, message: LogMessage) -> None:
|
||||||
raise NotImplementedError(f'{self.__class__.__name__}.write_stdout is not implemented')
|
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)
|
||||||
print('', end='', flush=True, file=sys.stderr)
|
print('', end='', flush=True, file=sys.stderr)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class FileCacheOutputStream(BaseOutputStream):
|
||||||
|
name = 'FileCacheOutputStream'
|
||||||
|
|
||||||
|
formatter: BaseFormatter = StdFormatter(enable_color=False)
|
@ -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())
|
|
98
lib_not_dr/logger/structure.py
Normal file
98
lib_not_dr/logger/structure.py
Normal 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())
|
@ -8,7 +8,7 @@ import inspect
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter, TimeFormatter, LevelFormatter, TraceFormatter
|
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):
|
class FormatterTest(unittest.TestCase):
|
||||||
|
Loading…
Reference in New Issue
Block a user