Files
HKDataManagment/base/LogHelper.py
2025-08-22 11:20:41 +08:00

90 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
日志管理类
日志输出到运行目录指定文件夹
日志文件按照YYYY-MM-dd.log 格式输出
"""
import logging
import sys
import os
from datetime import datetime
class LogHelper:
# 内部日志级别映射表
_LEVEL_MAP = {
'DEBUG': 10,
'INFO': 20,
'WARNING': 30,
'ERROR': 40,
'CRITICAL': 50
}
def __init__(self,
level='INFO',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=None,
log_dir="logs",
logger_name=None):
"""
初始化日志配置
:param level: 日志级别,默认为 logging.INFO
:param format: 日志格式字符串
:param handlers: 日志处理器列表,默认为空(会自动添加控制台处理器)
:param log_dir: 日志存储目录,默认为"logs"
"""
self.level = self._LEVEL_MAP.get(level.upper(), 20) # 默认INFO
self.format = format
self.handlers = handlers if handlers is not None else []
self.log_dir = log_dir
self.logger_name = logger_name
# 确保日志目录存在
os.makedirs(self.log_dir, exist_ok=True)
def add_console_handler(self, stream=sys.stdout, encoding='utf-8'):
"""添加控制台处理器"""
console_handler = logging.StreamHandler(stream)
console_handler.setFormatter(logging.Formatter(self.format))
if encoding:
console_handler.encoding = encoding
self.handlers.append(console_handler)
return self # 支持链式调用
def _get_daily_log_path(self):
"""生成基于当前日期的日志文件路径"""
today = datetime.now().strftime("%Y-%m-%d")
filename = f"{today}.log"
return os.path.join(self.log_dir, filename)
def _add_daily_file_handler(self, encoding='utf-8'):
"""添加按日期自动创建的文件处理器"""
log_path = self._get_daily_log_path()
file_handler = logging.FileHandler(log_path, encoding=encoding)
file_handler.setFormatter(logging.Formatter(self.format))
self.handlers.append(file_handler)
return self # 支持链式调用
def setup(self):
"""应用日志配置(自动添加日期文件处理器)"""
# 如果未提供任何处理器,默认添加控制台和日期文件处理器
if not self.handlers:
self.add_console_handler()
self._add_daily_file_handler()
# 获取或创建logger
logger = logging.getLogger(self.logger_name)
logger.setLevel(self.level)
# 移除所有现有处理器(避免重复添加)
for handler in logger.handlers[:]:
logger.removeHandler(handler)
# 添加配置的处理器
for handler in self.handlers:
logger.addHandler(handler)
# 确保日志消息不会传递给父logger避免重复记录
logger.propagate = False
return logger