From 04c84ce50f1a6ed033956030864b82b56fd010bb Mon Sep 17 00:00:00 2001 From: insistence <3055204202@qq.com> Date: Tue, 18 Nov 2025 11:42:18 +0800 Subject: [PATCH 1/2] refactor: expose get_logger to avoid sharing logger --- py_node_manager/__init__.py | 5 ++-- py_node_manager/logger.py | 54 +++++++++++++++++++++++++++++++++++++ py_node_manager/manager.py | 42 ++--------------------------- 3 files changed, 59 insertions(+), 42 deletions(-) create mode 100644 py_node_manager/logger.py diff --git a/py_node_manager/__init__.py b/py_node_manager/__init__.py index 73b5ffe..8457a7f 100644 --- a/py_node_manager/__init__.py +++ b/py_node_manager/__init__.py @@ -1,7 +1,8 @@ -from .manager import logger, NodeManager +from .logger import get_logger +from .manager import NodeManager __version__ = '0.1.0' -__all__ = ['logger', 'NodeManager'] +__all__ = ['get_logger', 'NodeManager'] diff --git a/py_node_manager/logger.py b/py_node_manager/logger.py new file mode 100644 index 0000000..fbfe919 --- /dev/null +++ b/py_node_manager/logger.py @@ -0,0 +1,54 @@ +import logging + + +# Custom log formatter to add colors for different log levels and show line numbers +class ColoredFormatter(logging.Formatter): + """Custom log formatter to add colors for different log levels and show line numbers""" + + # ANSI color codes + COLORS = { + 'DEBUG': '\033[36m', # cyan + 'INFO': '\033[32m', # green + 'WARNING': '\033[33m', # yellow + 'ERROR': '\033[31m', # red + 'CRITICAL': '\033[35m', # purple + 'RESET': '\033[0m', # reset + } + + def format(self, record: logging.LogRecord) -> str: + # Obtain the color corresponding to the log level + log_color = self.COLORS.get(record.levelname, self.COLORS['RESET']) + reset_color = self.COLORS['RESET'] + + # Add color to log level + record.levelname = f'{log_color}{record.levelname}{reset_color}' + + # Call the format method of the parent class + return super().format(record) + + +def get_logger(logger: logging.Logger) -> logging.Logger: + """ + Configure and return a custom logger with a specific format and color scheme + + Args: + logger (logging.Logger): The logger to configure. + + Returns: + logging.Logger: The configured logger. + """ + # Configure the logger + logger.setLevel(logging.INFO) + + # Create console processor + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + + # Create formatter with function name before line number + formatter = ColoredFormatter('%(asctime)s | %(levelname)s | %(name)s:%(funcName)s:%(lineno)d | %(message)s') + console_handler.setFormatter(formatter) + + # Add handler to logger + logger.addHandler(console_handler) + + return logger diff --git a/py_node_manager/manager.py b/py_node_manager/manager.py index 93bfbc9..0ca3f3b 100644 --- a/py_node_manager/manager.py +++ b/py_node_manager/manager.py @@ -6,48 +6,10 @@ import urllib.request import zipfile from typing import Dict, Optional, Tuple +from .logger import get_logger -# Custom log formatter to add colors for different log levels -class ColoredFormatter(logging.Formatter): - """Custom log formatter to add colors for different log levels and emoji""" - - # ANSI颜色代码 - COLORS = { - 'DEBUG': '\033[36m', # cyan - 'INFO': '\033[32m', # green - 'WARNING': '\033[33m', # yellow - 'ERROR': '\033[31m', # red - 'CRITICAL': '\033[35m', # purple - 'RESET': '\033[0m', # reset - } - - def format(self, record: logging.LogRecord) -> str: - # Obtain the color corresponding to the log level - log_color = self.COLORS.get(record.levelname, self.COLORS['RESET']) - reset_color = self.COLORS['RESET'] - - # Add color to log level - record.levelname = f'{log_color}{record.levelname}{reset_color}' - - # Call the format method of the parent class - return super().format(record) - - -# Configure the logger -logger = logging.getLogger(__name__) -logger.setLevel(logging.INFO) - -# Create console processor -console_handler = logging.StreamHandler() -console_handler.setLevel(logging.INFO) - -# Create formatter -formatter = ColoredFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') -console_handler.setFormatter(formatter) - -# Add handler to logger -logger.addHandler(console_handler) +logger = get_logger(logging.getLogger(__name__)) class NodeManager: From 2d0e1df5fe59711ebbd17e7adbcd4375690bc0b6 Mon Sep 17 00:00:00 2001 From: insistence <3055204202@qq.com> Date: Tue, 18 Nov 2025 11:45:29 +0800 Subject: [PATCH 2/2] chore: release version 0.1.1 --- py_node_manager/__init__.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/py_node_manager/__init__.py b/py_node_manager/__init__.py index 8457a7f..f5f4986 100644 --- a/py_node_manager/__init__.py +++ b/py_node_manager/__init__.py @@ -2,7 +2,7 @@ from .manager import NodeManager -__version__ = '0.1.0' +__version__ = '0.1.1' __all__ = ['get_logger', 'NodeManager'] diff --git a/pyproject.toml b/pyproject.toml index 0a2c769..9361d03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "py-node-manager" -version = "0.1.0" +version = "0.1.1" description = "A tool library for conveniently using Node.js in Python" readme = "README.md" requires-python = ">=3.8"