rename and add more
This commit is contained in:
parent
ccdb57613b
commit
d272c8870d
@ -37,7 +37,7 @@ pip install lib-not-dr[nuitka]
|
|||||||
> 等待 0.4.0
|
> 等待 0.4.0
|
||||||
|
|
||||||
```python title="logger.py"
|
```python title="logger.py"
|
||||||
from lib_not_dr.logger.logger import Logger
|
from lib_not_dr.loggers.logger import Logger
|
||||||
|
|
||||||
logger = Logger.get_logger_by_name("test")
|
logger = Logger.get_logger_by_name("test")
|
||||||
|
|
||||||
|
@ -12,6 +12,21 @@
|
|||||||
- `[tool.lndl.nuitka]`
|
- `[tool.lndl.nuitka]`
|
||||||
- `script = "script.py"`
|
- `script = "script.py"`
|
||||||
|
|
||||||
|
### Logger
|
||||||
|
|
||||||
|
- 将 `logger` 模块重命名为 `loggers`
|
||||||
|
|
||||||
|
- 添加了 `get_config` 函数
|
||||||
|
- 用于获取全局配置
|
||||||
|
- 我也不确定有啥用捏
|
||||||
|
- 添加了 `read_config` 函数
|
||||||
|
- 用于向指定 `ConfigStorage`/全局 `ConfigStorage` 实例中添加配置
|
||||||
|
- 添加了 `get_logger` 函数
|
||||||
|
- 用于从指定 `ConfigStorage`/全局 `ConfigStorage` 实例中获取指定名称的 `Logger` 实例
|
||||||
|
- `Logger`
|
||||||
|
- 添加了 `clone_logger` 函数
|
||||||
|
- 用于克隆一个新的配置相同的 `Logger` 实例
|
||||||
|
|
||||||
## 0.2.3
|
## 0.2.3
|
||||||
|
|
||||||
### lndl-nuitka
|
### lndl-nuitka
|
||||||
|
7
example/lndl-nuitka/example1.toml
Normal file
7
example/lndl-nuitka/example1.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[tool.lndl.nuitka.cli]
|
||||||
|
main = 'test.py'
|
||||||
|
|
||||||
|
standalone = true
|
||||||
|
clang = true
|
||||||
|
msvc = 'latest'
|
||||||
|
mingw64 = false
|
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
from lib_not_dr.logger.formatter import StdFormatter
|
from lib_not_dr.loggers.formatter import StdFormatter
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# All rights reserved
|
# All rights reserved
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
from lib_not_dr.logger.logger import Logger
|
from lib_not_dr import loggers
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ def logging_logger() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def lndl_logger() -> None:
|
def lndl_logger() -> None:
|
||||||
logger = Logger.get_logger_by_name("test")
|
logger = loggers.get_logger("test")
|
||||||
logger.global_level = 20
|
logger.global_level = 20
|
||||||
|
|
||||||
logger.info("Hello World!")
|
logger.info("Hello World!")
|
||||||
@ -34,7 +34,7 @@ def lndl_logger() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
logger = Logger.get_logger_by_name("test")
|
logger = loggers.get_logger("test")
|
||||||
logger.global_level = 0
|
logger.global_level = 0
|
||||||
|
|
||||||
logger.info("Hello World!")
|
logger.info("Hello World!")
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
import time
|
import time
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
from lib_not_dr.logger.outstream import FileCacheOutputStream, StdioOutputStream
|
from lib_not_dr.loggers.outstream import FileCacheOutputStream, StdioOutputStream
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
log_message = LogMessage(
|
log_message = LogMessage(
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from lib_not_dr import logger, nuitka, types, command
|
from lib_not_dr import loggers, nuitka, types, command
|
||||||
|
|
||||||
_version_ = "0.3.0-rc.1"
|
_version_ = "0.3.0-rc.1"
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ __all__ = [
|
|||||||
"logger",
|
"logger",
|
||||||
"nuitka",
|
"nuitka",
|
||||||
"types",
|
"types",
|
||||||
"command"
|
"command",
|
||||||
|
"logger",
|
||||||
]
|
]
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
@ -94,3 +94,25 @@ class LogLevel(Options):
|
|||||||
for level in reversed(cls.level_name_map):
|
for level in reversed(cls.level_name_map):
|
||||||
if level_int >= level:
|
if level_int >= level:
|
||||||
return cls.level_name_map[level]
|
return cls.level_name_map[level]
|
||||||
|
|
||||||
|
|
||||||
|
# fmt: off
|
||||||
|
from lib_not_dr.loggers.config import get_logger, get_config, read_config
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
# modules
|
||||||
|
'logger',
|
||||||
|
'formatter',
|
||||||
|
'outstream',
|
||||||
|
'structure',
|
||||||
|
'config',
|
||||||
|
# class
|
||||||
|
'LogLevel',
|
||||||
|
# function,
|
||||||
|
'get_logger',
|
||||||
|
'get_config',
|
||||||
|
'read_config',
|
||||||
|
# variable
|
||||||
|
'COLOR_SUPPORT',
|
||||||
|
]
|
||||||
|
# fmt: on
|
@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
from typing import List, Set, Dict, Optional, Tuple
|
from typing import List, Set, Dict, Optional, Tuple
|
||||||
|
|
||||||
from lib_not_dr.logger.logger import Logger
|
from lib_not_dr.loggers.logger import Logger
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter
|
from lib_not_dr.loggers.formatter import BaseFormatter
|
||||||
from lib_not_dr.logger.outstream import BaseOutputStream
|
from lib_not_dr.loggers.outstream import BaseOutputStream
|
||||||
from lib_not_dr.logger import formatter, outstream, LogLevel
|
from lib_not_dr.loggers import formatter, outstream, LogLevel
|
||||||
from lib_not_dr.types.options import Options, OptionNameNotDefined
|
from lib_not_dr.types.options import Options, OptionNameNotDefined
|
||||||
|
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ class ConfigStorage(Options):
|
|||||||
fail_formatters: Dict[str, dict] = {}
|
fail_formatters: Dict[str, dict] = {}
|
||||||
fail_outputs: Dict[str, dict] = {}
|
fail_outputs: Dict[str, dict] = {}
|
||||||
|
|
||||||
log: Logger = Logger(logger_name="logger-storage")
|
log: Logger = Logger(logger_name="loggers-storage")
|
||||||
|
|
||||||
def have_formatter(self, formatter_name: str) -> bool:
|
def have_formatter(self, formatter_name: str) -> bool:
|
||||||
return formatter_name in self.formatters
|
return formatter_name in self.formatters
|
||||||
@ -266,8 +266,8 @@ class ConfigStorage(Options):
|
|||||||
|
|
||||||
def parse_logger(self, logger_config: Dict[str, dict]) -> None:
|
def parse_logger(self, logger_config: Dict[str, dict]) -> None:
|
||||||
"""
|
"""
|
||||||
Parse logger config
|
Parse loggers config
|
||||||
:param logger_config: config of logger
|
:param logger_config: config of loggers
|
||||||
"""
|
"""
|
||||||
env = ConfigStorage()
|
env = ConfigStorage()
|
||||||
for logger_name, config in logger_config.items():
|
for logger_name, config in logger_config.items():
|
||||||
@ -315,15 +315,27 @@ class ConfigStorage(Options):
|
|||||||
self.parse_logger(config.get("Logger", {}))
|
self.parse_logger(config.get("Logger", {}))
|
||||||
|
|
||||||
|
|
||||||
def gen_default_storage() -> ConfigStorage:
|
_storage = ConfigStorage(loggers={'root': Logger(logger_name='root')})
|
||||||
"""
|
|
||||||
Generate default storage
|
|
||||||
:return:
|
def get_config() -> ConfigStorage:
|
||||||
"""
|
|
||||||
_storage = ConfigStorage()
|
|
||||||
_root_logger = Logger(logger_name="root")
|
|
||||||
_storage.loggers["root"] = _root_logger
|
|
||||||
return _storage
|
return _storage
|
||||||
|
|
||||||
|
|
||||||
storage = gen_default_storage()
|
def get_logger(name: str = 'root', storage: Optional[ConfigStorage] = None) -> Logger:
|
||||||
|
if storage is None:
|
||||||
|
storage = _storage
|
||||||
|
|
||||||
|
if name not in storage.loggers:
|
||||||
|
root_log = storage.loggers['root'].clone_logger()
|
||||||
|
root_log.logger_name = name
|
||||||
|
storage.loggers[name] = root_log
|
||||||
|
return storage.loggers[name]
|
||||||
|
|
||||||
|
|
||||||
|
def read_config(log_config: Dict, storage: Optional[ConfigStorage] = None) -> ConfigStorage:
|
||||||
|
if storage is None:
|
||||||
|
storage = _storage
|
||||||
|
|
||||||
|
storage.read_dict_config(log_config)
|
||||||
|
return storage
|
@ -9,12 +9,12 @@ from pathlib import Path
|
|||||||
from string import Template
|
from string import Template
|
||||||
from typing import List, Union, Optional, TYPE_CHECKING
|
from typing import List, Union, Optional, TYPE_CHECKING
|
||||||
|
|
||||||
from lib_not_dr.logger import LogLevel
|
from lib_not_dr.loggers import LogLevel
|
||||||
from lib_not_dr.types.options import Options
|
from lib_not_dr.types.options import Options
|
||||||
from lib_not_dr.logger.structure import LogMessage, FormattingMessage
|
from lib_not_dr.loggers.structure import LogMessage, FormattingMessage
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from lib_not_dr.logger.formatter.colors import BaseColorFormatter
|
from lib_not_dr.loggers.formatter.colors import BaseColorFormatter
|
||||||
|
|
||||||
__all__ = ["BaseFormatter", "MainFormatter", "StdFormatter"]
|
__all__ = ["BaseFormatter", "MainFormatter", "StdFormatter"]
|
||||||
|
|
||||||
@ -48,11 +48,11 @@ class BaseFormatter(Options):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _info(cls) -> str:
|
def _info(cls) -> str:
|
||||||
info = cls.add_info(
|
info = cls.add_info(
|
||||||
"logger_name", "logger name", "The name of the logger"
|
"logger_name", "loggers name", "The name of the loggers"
|
||||||
)
|
)
|
||||||
info += "\n"
|
info += "\n"
|
||||||
info += cls.add_info(
|
info += cls.add_info(
|
||||||
"logger_tag", "logger tag", "The tag of the logger"
|
"logger_tag", "loggers tag", "The tag of the loggers"
|
||||||
)
|
)
|
||||||
return info
|
return info
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ class StdFormatter(BaseFormatter):
|
|||||||
enable_color: bool = True
|
enable_color: bool = True
|
||||||
|
|
||||||
sub_formatter: List[BaseFormatter] = [MainFormatter()]
|
sub_formatter: List[BaseFormatter] = [MainFormatter()]
|
||||||
from lib_not_dr.logger.formatter.colors import (
|
from lib_not_dr.loggers.formatter.colors import (
|
||||||
LevelColorFormatter,
|
LevelColorFormatter,
|
||||||
LoggerColorFormatter,
|
LoggerColorFormatter,
|
||||||
TimeColorFormatter,
|
TimeColorFormatter,
|
@ -4,9 +4,9 @@
|
|||||||
# All rights reserved
|
# All rights reserved
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
from lib_not_dr.logger import LogLevel, COLOR_SUPPORT
|
from lib_not_dr.loggers import LogLevel, COLOR_SUPPORT
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter
|
from lib_not_dr.loggers.formatter import BaseFormatter
|
||||||
from lib_not_dr.logger.structure import FormattingMessage
|
from lib_not_dr.loggers.structure import FormattingMessage
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"BaseColorFormatter",
|
"BaseColorFormatter",
|
||||||
@ -116,7 +116,7 @@ class LoggerColorFormatter(BaseColorFormatter):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _info(cls) -> str:
|
def _info(cls) -> str:
|
||||||
return cls.add_info(
|
return cls.add_info(
|
||||||
"colored logger name", "logger name", "A colored logger name"
|
"colored loggers name", "loggers name", "A colored loggers name"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
def _format(self, message: FormattingMessage) -> FormattingMessage:
|
@ -9,10 +9,10 @@ import inspect
|
|||||||
from types import FrameType
|
from types import FrameType
|
||||||
from typing import List, Optional, Union
|
from typing import List, Optional, Union
|
||||||
|
|
||||||
from lib_not_dr.logger import LogLevel
|
from lib_not_dr.loggers import LogLevel
|
||||||
from lib_not_dr.types.options import Options
|
from lib_not_dr.types.options import Options
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
from lib_not_dr.logger.outstream import BaseOutputStream, StdioOutputStream
|
from lib_not_dr.loggers.outstream import BaseOutputStream, StdioOutputStream
|
||||||
|
|
||||||
|
|
||||||
class Logger(Options):
|
class Logger(Options):
|
||||||
@ -25,6 +25,20 @@ class Logger(Options):
|
|||||||
enable: bool = True
|
enable: bool = True
|
||||||
level: int = 20 # info
|
level: int = 20 # info
|
||||||
|
|
||||||
|
def clone_logger(self) -> "Logger":
|
||||||
|
"""
|
||||||
|
Clone a new loggers with the same config.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Logger: The cloned loggers.
|
||||||
|
"""
|
||||||
|
return Logger(
|
||||||
|
logger_name=self.logger_name,
|
||||||
|
enable=self.enable,
|
||||||
|
level=self.level,
|
||||||
|
outputs=self.outputs.copy(),
|
||||||
|
)
|
||||||
|
|
||||||
def log_for(self, level: int) -> bool:
|
def log_for(self, level: int) -> bool:
|
||||||
"""
|
"""
|
||||||
Check if logging is enabled for a specific level.
|
Check if logging is enabled for a specific level.
|
||||||
@ -138,25 +152,6 @@ class Logger(Options):
|
|||||||
# done?
|
# done?
|
||||||
# 20231106 00:06
|
# 20231106 00:06
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_logger_by_name(name: str) -> "Logger":
|
|
||||||
"""
|
|
||||||
Get a logger by name.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
name (str): The name of the logger.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Logger: The logger with the specified name.
|
|
||||||
"""
|
|
||||||
from lib_not_dr.logger.config import storage
|
|
||||||
|
|
||||||
if storage.have_logger(name):
|
|
||||||
return storage.loggers[name]
|
|
||||||
_logger = Logger(logger_name=name)
|
|
||||||
storage.loggers[name] = _logger
|
|
||||||
return _logger
|
|
||||||
|
|
||||||
def info(
|
def info(
|
||||||
self,
|
self,
|
||||||
*message,
|
*message,
|
@ -14,10 +14,10 @@ import threading
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from lib_not_dr.logger import LogLevel
|
from lib_not_dr.loggers import LogLevel
|
||||||
from lib_not_dr.types.options import Options
|
from lib_not_dr.types.options import Options
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter, StdFormatter
|
from lib_not_dr.loggers.formatter import BaseFormatter, StdFormatter
|
||||||
|
|
||||||
__all__ = ["BaseOutputStream", "StdioOutputStream", "FileCacheOutputStream"]
|
__all__ = ["BaseOutputStream", "StdioOutputStream", "FileCacheOutputStream"]
|
||||||
|
|
@ -49,9 +49,9 @@ class LogMessage:
|
|||||||
:param flush: do flush or not
|
:param flush: do flush or not
|
||||||
:param level: level of message
|
:param level: level of message
|
||||||
:param log_time: time of message (default: time.time_ns())
|
:param log_time: time of message (default: time.time_ns())
|
||||||
:param logger_name: name of logger
|
:param logger_name: name of loggers
|
||||||
:param logger_tag: tag of logger
|
:param logger_tag: tag of loggers
|
||||||
:param stack_trace: stack trace of logger
|
:param stack_trace: stack trace of loggers
|
||||||
"""
|
"""
|
||||||
# 20231128 23:23
|
# 20231128 23:23
|
||||||
# 因为 Options 的初始化太慢了 所以改为不继承 直接编写
|
# 因为 Options 的初始化太慢了 所以改为不继承 直接编写
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from lib_not_dr.logger.config import ConfigStorage
|
from lib_not_dr.loggers.config import ConfigStorage
|
||||||
|
|
||||||
|
|
||||||
class TestConfigStorage(unittest.TestCase):
|
class TestConfigStorage(unittest.TestCase):
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
import inspect
|
import inspect
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from lib_not_dr.logger.formatter import BaseFormatter, MainFormatter
|
from lib_not_dr.loggers.formatter import BaseFormatter, MainFormatter
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
|
|
||||||
|
|
||||||
class FormatterTest(unittest.TestCase):
|
class FormatterTest(unittest.TestCase):
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from lib_not_dr.logger.structure import LogMessage
|
from lib_not_dr.loggers.structure import LogMessage
|
||||||
|
|
||||||
|
|
||||||
class LogMessageTest(unittest.TestCase):
|
class LogMessageTest(unittest.TestCase):
|
||||||
|
Loading…
Reference in New Issue
Block a user