sync lib not dr
This commit is contained in:
parent
0d97055fad
commit
086b40376e
@ -3,11 +3,10 @@
|
|||||||
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
|
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from string import Template
|
from string import Template
|
||||||
from typing import List, Union, Optional
|
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.structers import LogMessage, FormattingMessage
|
||||||
@ -26,13 +25,10 @@ class BaseFormatter(Options):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def info(cls) -> str:
|
def info(cls) -> str:
|
||||||
infos = {BaseFormatter.name: BaseFormatter._info()}
|
infos = {BaseFormatter.name: BaseFormatter._info()}
|
||||||
# cache = "## Base Formatter\n"
|
|
||||||
# cache += BaseFormatter._info()
|
|
||||||
# cache += f"## {cls.name}\n"
|
|
||||||
# cache += cls._info()
|
|
||||||
cache = ''
|
cache = ''
|
||||||
for formatter in cls.sub_formatter:
|
for formatter in cls.sub_formatter:
|
||||||
infos[formatter.name] = formatter._info()
|
infos[formatter.name] = formatter._info()
|
||||||
|
infos[cls.name] = cls._info()
|
||||||
for name, info in infos.items():
|
for name, info in infos.items():
|
||||||
cache += f"## {name}\n"
|
cache += f"## {name}\n"
|
||||||
cache += info
|
cache += info
|
||||||
@ -88,7 +84,7 @@ class TimeFormatter(BaseFormatter):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _info(cls) -> str:
|
def _info(cls) -> str:
|
||||||
return cls.add_info('log_time', 'formatted time when logging', 'The time format string'
|
return cls.add_info('log_time', 'formatted time when logging', 'The time format string'
|
||||||
'. See https://docs.python.org/3/library/time.html#time.strftime for more information.')
|
'. See https://docs.python.org/3/library/time.html#time.strftime for more information.')
|
||||||
|
|
||||||
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
||||||
time_mark = time.localtime(message[0].log_time / 1000000000)
|
time_mark = time.localtime(message[0].log_time / 1000000000)
|
||||||
@ -108,10 +104,10 @@ class LevelFormatter(BaseFormatter):
|
|||||||
level_get_higher: bool = True
|
level_get_higher: bool = True
|
||||||
|
|
||||||
level_name_map = {
|
level_name_map = {
|
||||||
0: 'NOTSET',
|
0: 'NOTSET',
|
||||||
2: 'TRACE',
|
2: 'TRACE',
|
||||||
5: 'FINE',
|
5: 'FINE',
|
||||||
7: 'DEBUG',
|
7: 'DEBUG',
|
||||||
10: 'INFO',
|
10: 'INFO',
|
||||||
30: 'WARN',
|
30: 'WARN',
|
||||||
50: 'ERROR',
|
50: 'ERROR',
|
||||||
@ -119,13 +115,13 @@ class LevelFormatter(BaseFormatter):
|
|||||||
}
|
}
|
||||||
name_level_map = {
|
name_level_map = {
|
||||||
'NOTSET': 0,
|
'NOTSET': 0,
|
||||||
'TRACE': 2,
|
'TRACE': 2,
|
||||||
'FINE': 5,
|
'FINE': 5,
|
||||||
'DEBUG': 7,
|
'DEBUG': 7,
|
||||||
'INFO': 10,
|
'INFO': 10,
|
||||||
'WARN': 30,
|
'WARN': 30,
|
||||||
'ERROR': 50,
|
'ERROR': 50,
|
||||||
'FATAL': 90
|
'FATAL': 90
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -154,23 +150,110 @@ class LevelFormatter(BaseFormatter):
|
|||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
||||||
class StdFormatter(BaseFormatter):
|
class TraceFormatter(BaseFormatter):
|
||||||
name = 'StdFormatter'
|
name = 'TraceFormatter'
|
||||||
|
|
||||||
sub_formatter = [TimeFormatter(), LevelFormatter()]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _info(cls) -> str:
|
def _info(cls) -> str:
|
||||||
return ''
|
info = cls.add_info('logging file', 'log_source', 'the logging file name')
|
||||||
|
info += '\n'
|
||||||
|
info += cls.add_info('logging line', 'log_line', 'the logging line number')
|
||||||
|
info += '\n'
|
||||||
|
info += cls.add_info('logging function', 'log_function', 'the logging function name')
|
||||||
|
return info
|
||||||
|
|
||||||
|
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
||||||
|
if message[0].stack_trace is None:
|
||||||
|
return message
|
||||||
|
message[1]['log_source'] = message[0].stack_trace.f_code.co_filename
|
||||||
|
message[1]['log_line'] = message[0].stack_trace.f_lineno
|
||||||
|
message[1]['log_function'] = message[0].stack_trace.f_code.co_name
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
class LevelColorFormatter(BaseFormatter):
|
||||||
|
name = 'LevelColorFormatter'
|
||||||
|
|
||||||
|
enable_color: bool = True
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _default_color() -> Dict[int, Tuple[str, str]]:
|
||||||
|
return {
|
||||||
|
# Notset: just black
|
||||||
|
0: ('', ''),
|
||||||
|
# Trace: blue
|
||||||
|
2: ('\033[0;34m', '\033[0m'),
|
||||||
|
# Fine: green
|
||||||
|
5: ('\033[0;32m', '\033[0m'),
|
||||||
|
# Debug: cyan
|
||||||
|
7: ('\033[0;36m', '\033[0m'),
|
||||||
|
# Info: white
|
||||||
|
10: ('\033[0;37m', '\033[0m'),
|
||||||
|
# Warn: yellow
|
||||||
|
30: ('\033[0;33m', '\033[0m'),
|
||||||
|
# Error: red
|
||||||
|
50: ('\033[0;31m', '\033[0m'),
|
||||||
|
# Fatal: red
|
||||||
|
90: ('\033[0;31m', '\033[0m')
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _info(cls) -> str:
|
||||||
|
info = cls.add_info('colored message', 'message', 'A colored message')
|
||||||
|
info += '\n'
|
||||||
|
info += cls.add_info('colored level', 'level', 'A colored level')
|
||||||
|
info += '\n'
|
||||||
|
info += cls.add_info('colored logger name', 'logger_name', 'A colored logger name')
|
||||||
|
return info
|
||||||
|
|
||||||
|
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
||||||
|
if message[1].get('level') is None:
|
||||||
|
return message
|
||||||
|
# 向上寻找等级
|
||||||
|
for level in self._default_color():
|
||||||
|
if message[0].level < level:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
level = 90
|
||||||
|
# 获取颜色
|
||||||
|
color = self._default_color()[level]
|
||||||
|
# 添加颜色
|
||||||
|
message[1]['messages'] = f'{color[0]}{message[1]["messages"]}{color[1]}'
|
||||||
|
message[1]['level'] = f'{color[0]}{message[1]["level"]}{color[1]}'
|
||||||
|
message[1]['logger_name'] = f'{color[0]}{message[1]["logger_name"]}{color[1]}'
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
class StdFormatter(BaseFormatter):
|
||||||
|
name = 'StdFormatter'
|
||||||
|
|
||||||
|
sub_formatter = [TimeFormatter(), LevelFormatter(), TraceFormatter(), LevelColorFormatter()]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _info(cls) -> str:
|
||||||
|
return 'None'
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
log_message = LogMessage(messages=['Hello World!'],
|
||||||
|
level=10,
|
||||||
|
stack_trace=inspect.currentframe(),
|
||||||
|
logger_tag='tester',
|
||||||
|
logger_name='test')
|
||||||
|
|
||||||
print(TimeFormatter.info())
|
print(TimeFormatter.info())
|
||||||
print(TimeFormatter().format_message(LogMessage(messages=['Hello World!'])))
|
print(TimeFormatter().format_message(log_message))
|
||||||
|
|
||||||
print(LevelFormatter.info())
|
print(LevelFormatter.info())
|
||||||
print(LevelFormatter().format_message(LogMessage(messages=['Hello World!'], level=10)))
|
print(LevelFormatter().format_message(log_message))
|
||||||
|
|
||||||
|
print(TraceFormatter.info())
|
||||||
|
print(TraceFormatter().format_message(log_message))
|
||||||
|
|
||||||
|
print(LevelColorFormatter.info())
|
||||||
|
print(LevelColorFormatter().format_message(log_message))
|
||||||
|
|
||||||
print(StdFormatter.info())
|
print(StdFormatter.info())
|
||||||
print(StdFormatter().format_message(LogMessage(messages=['Hello World!'], level=10)))
|
print(StdFormatter().format_message(log_message))
|
||||||
|
Loading…
Reference in New Issue
Block a user