mirror of
https://github.com/Nanaloveyuki/py-logiliteal.git
synced 2025-09-05 11:06:22 +00:00
✨ 添加了文件类型日志存放
This commit is contained in:
@ -5,6 +5,7 @@ pliblog - 简易,现代化具有色彩的日志记录器 / Easy, Modern and colo
|
|||||||
# python 3.13.5
|
# python 3.13.5
|
||||||
|
|
||||||
from .utils import get_config, set_config, reset_config, get_asctime, get_date, get_time, get_weekday, fmt_console, fmt_placeholder, fmt_message, fmt_level_name
|
from .utils import get_config, set_config, reset_config, get_asctime, get_date, get_time, get_weekday, fmt_console, fmt_placeholder, fmt_message, fmt_level_name
|
||||||
|
from .levels import Logger
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"get_config",
|
"get_config",
|
||||||
@ -18,4 +19,5 @@ __all__ = [
|
|||||||
"fmt_placeholder",
|
"fmt_placeholder",
|
||||||
"fmt_message",
|
"fmt_message",
|
||||||
"fmt_level_name",
|
"fmt_level_name",
|
||||||
|
"Logger"
|
||||||
]
|
]
|
13
src/levels/__init__.py
Normal file
13
src/levels/__init__.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
"""
|
||||||
|
日志级别模块
|
||||||
|
Log level module
|
||||||
|
|
||||||
|
"""
|
||||||
|
# encoding: utf-8
|
||||||
|
# python 3.13.5
|
||||||
|
|
||||||
|
from .levels import Logger
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"Logger"
|
||||||
|
]
|
128
src/levels/levels.py
Normal file
128
src/levels/levels.py
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
"""
|
||||||
|
日志级别模块
|
||||||
|
Log level module
|
||||||
|
|
||||||
|
"""
|
||||||
|
# encoding: utf-8
|
||||||
|
# python 3.13.5
|
||||||
|
|
||||||
|
from typing import Optional, Any
|
||||||
|
from ..utils.fmt import fmt_file, fmt_message, fmt_console
|
||||||
|
from ..utils.configs import get_config, set_config
|
||||||
|
from ..utils.time import get_asctime
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
def _get_full_path(file_path, file_name):
|
||||||
|
file_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
return file_path / file_name
|
||||||
|
|
||||||
|
file_path = pathlib.Path(get_config("file_path"))
|
||||||
|
file_name = get_config("file_name")
|
||||||
|
file_format = get_config("file_format")
|
||||||
|
file_encoding = get_config("file_encoding")
|
||||||
|
is_enable_console = get_config("enable_console")
|
||||||
|
is_enable_file = get_config("enable_file")
|
||||||
|
|
||||||
|
class Logger:
|
||||||
|
def __init__(self):
|
||||||
|
if pathlib.Path(file_path).exists():
|
||||||
|
if not pathlib.Path(file_path).is_dir():
|
||||||
|
self.warn("日志文件路径不是目录,已自动自动使用默认目录")
|
||||||
|
set_config("file_path", "./logs")
|
||||||
|
pathlib.Path("./logs").mkdir(parents=True, exist_ok=True)
|
||||||
|
if _get_full_path(file_path, file_name).exists():
|
||||||
|
from os import rename
|
||||||
|
rename(_get_full_path(file_path, file_name), _get_full_path(file_path, f"{get_asctime().replace(':', '-')}.log"))
|
||||||
|
self.debug("日志文件已存在,已自动重命名")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def info(message: Any, prefix: str | None = None, level: int = 20) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
信息日志
|
||||||
|
Info log
|
||||||
|
:param message: 消息内容 Message content
|
||||||
|
:param prefix: 前缀 Prefix
|
||||||
|
:param level: 日志级别 Log level(11~20)
|
||||||
|
"""
|
||||||
|
if level < 11 or level > 20:
|
||||||
|
return None
|
||||||
|
if is_enable_file:
|
||||||
|
with open(_get_full_path(file_path, file_name), "a", encoding=file_encoding) as f:
|
||||||
|
f.write(fmt_file(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
if is_enable_console:
|
||||||
|
print(fmt_console(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
return fmt_console(level, fmt_message(message, no_placeholder=True), prefix)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def debug(message: Any, prefix: str | None = None, level: int = 10) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
调试日志
|
||||||
|
Debug log
|
||||||
|
:param message: 消息内容 Message content
|
||||||
|
:param prefix: 前缀 Prefix
|
||||||
|
:param level: 日志级别 Log level(0~10)
|
||||||
|
"""
|
||||||
|
if level < 0 or level > 10:
|
||||||
|
return None
|
||||||
|
if is_enable_file:
|
||||||
|
with open(_get_full_path(file_path, file_name), "a", encoding=file_encoding) as f:
|
||||||
|
f.write(fmt_file(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
if is_enable_console:
|
||||||
|
print(fmt_console(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
return fmt_console(level, fmt_message(message, no_placeholder=True), prefix)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def warn(message: Any, prefix: str | None = None, level: int = 30) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
警告日志
|
||||||
|
Warn log
|
||||||
|
:param message: 消息内容 Message content
|
||||||
|
:param prefix: 前缀 Prefix
|
||||||
|
:param level: 日志级别 Log level(30~40)
|
||||||
|
"""
|
||||||
|
if level < 30 or level > 40:
|
||||||
|
return None
|
||||||
|
if is_enable_file:
|
||||||
|
with open(_get_full_path(file_path, file_name), "a", encoding=file_encoding) as f:
|
||||||
|
f.write(fmt_file(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
if is_enable_console:
|
||||||
|
print(fmt_console(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
return fmt_console(level, fmt_message(message, no_placeholder=True), prefix)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def error(message: Any, prefix: str | None = None, level: int = 40) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
错误日志
|
||||||
|
Error log
|
||||||
|
:param message: 消息内容 Message content
|
||||||
|
:param prefix: 前缀 Prefix
|
||||||
|
:param level: 日志级别 Log level(40~50)
|
||||||
|
"""
|
||||||
|
if level < 40 or level > 50:
|
||||||
|
return None
|
||||||
|
if is_enable_file:
|
||||||
|
with open(_get_full_path(file_path, file_name), "a", encoding=file_encoding) as f:
|
||||||
|
f.write(fmt_file(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
if is_enable_console:
|
||||||
|
print(fmt_console(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
return fmt_console(level, fmt_message(message, no_placeholder=True), prefix)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def critical(message: Any, prefix: str | None = None, level: int = 50) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
严重错误日志
|
||||||
|
Critical error log
|
||||||
|
:param message: 消息内容 Message content
|
||||||
|
:param prefix: 前缀 Prefix
|
||||||
|
:param level: 日志级别 Log level(50~60)
|
||||||
|
"""
|
||||||
|
if level < 50 or level > 60:
|
||||||
|
return None
|
||||||
|
if is_enable_file:
|
||||||
|
with open(_get_full_path(file_path, file_name), "a", encoding=file_encoding) as f:
|
||||||
|
f.write(fmt_file(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
if is_enable_console:
|
||||||
|
print(fmt_console(level, fmt_message(message, no_placeholder=True), prefix))
|
||||||
|
return fmt_console(level, fmt_message(message, no_placeholder=True), prefix)
|
||||||
|
|
||||||
|
|
@ -79,7 +79,7 @@ def fmt_placeholder(message: Any, use_date_color: bool = True) -> str:
|
|||||||
))
|
))
|
||||||
return message
|
return message
|
||||||
|
|
||||||
def fmt_message(message: Any, no_placeholder: bool = False) -> str:
|
def fmt_message(message: Any, no_placeholder: bool = False, no_color: bool = False) -> str:
|
||||||
"""
|
"""
|
||||||
格式化消息内容
|
格式化消息内容
|
||||||
Format message content
|
Format message content
|
||||||
@ -128,10 +128,14 @@ def fmt_message(message: Any, no_placeholder: bool = False) -> str:
|
|||||||
current_content = []
|
current_content = []
|
||||||
|
|
||||||
return ''.join(result)
|
return ''.join(result)
|
||||||
if no_placeholder:
|
if no_color:
|
||||||
return process_color_tags(str(message))
|
processed_message = str(message)
|
||||||
else:
|
else:
|
||||||
return process_color_tags(fmt_placeholder(str(message)))
|
processed_message = process_color_tags(str(message))
|
||||||
|
if no_placeholder:
|
||||||
|
return processed_message
|
||||||
|
else:
|
||||||
|
return process_color_tags(fmt_placeholder(processed_message)) if not no_color else fmt_placeholder(processed_message)
|
||||||
|
|
||||||
def fmt_level_name(level_name: str) -> str:
|
def fmt_level_name(level_name: str) -> str:
|
||||||
if get_config("console_color") != True:
|
if get_config("console_color") != True:
|
||||||
@ -166,7 +170,7 @@ def fmt_console(level: int, message: Any, prefix: str | None = None) -> Optional
|
|||||||
fmt = fmt_placeholder(fmt)
|
fmt = fmt_placeholder(fmt)
|
||||||
return fmt.format(
|
return fmt.format(
|
||||||
levelname = fmt_level_name(fmt_level_number(level)),
|
levelname = fmt_level_name(fmt_level_number(level)),
|
||||||
prefix = prefix,
|
prefix = fmt_message(prefix, no_placeholder=True),
|
||||||
message = fmt_message(message, no_placeholder=True)
|
message = fmt_message(message, no_placeholder=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -184,9 +188,9 @@ def fmt_file(level: int, message: Any, prefix: str | None = None) -> Optional[st
|
|||||||
return None
|
return None
|
||||||
if prefix is None:
|
if prefix is None:
|
||||||
prefix = ""
|
prefix = ""
|
||||||
fmt = fmt_placeholder(fmt)
|
fmt = fmt_placeholder(fmt, use_date_color=False)
|
||||||
return fmt.format(
|
return f"{fmt.format(
|
||||||
levelname = fmt_level_name(fmt_level_number(level)),
|
levelname = fmt_level_number(level),
|
||||||
prefix = prefix,
|
prefix = fmt_message(prefix, no_placeholder=True, no_color=True),
|
||||||
message = fmt_message(message, no_placeholder=True)
|
message = fmt_message(message, no_placeholder=True, no_color=True)
|
||||||
)
|
)}\n"
|
||||||
|
@ -6,7 +6,6 @@ pliblog's style tools, used to format log output
|
|||||||
# encoding = utf-8
|
# encoding = utf-8
|
||||||
# python 3.13.5
|
# python 3.13.5
|
||||||
|
|
||||||
from .configs import get_config
|
|
||||||
from typing import Union, Optional
|
from typing import Union, Optional
|
||||||
|
|
||||||
def _get_hex_to_ansi(hex_color: str) -> Union[Optional[str], None]:
|
def _get_hex_to_ansi(hex_color: str) -> Union[Optional[str], None]:
|
||||||
|
Reference in New Issue
Block a user