105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
|
|
# import logging
|
|||
|
|
# import sys
|
|||
|
|
|
|||
|
|
# class LogHelper:
|
|||
|
|
# def __init__(self,
|
|||
|
|
# level=logging.INFO,
|
|||
|
|
# format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|||
|
|
# handlers=None):
|
|||
|
|
# """
|
|||
|
|
# 初始化日志配置
|
|||
|
|
|
|||
|
|
# :param level: 日志级别,默认为 logging.INFO
|
|||
|
|
# :param format: 日志格式字符串
|
|||
|
|
# :param handlers: 日志处理器列表,默认为空(会自动添加控制台处理器)
|
|||
|
|
# """
|
|||
|
|
# self.level = level
|
|||
|
|
# self.format = format
|
|||
|
|
# self.handlers = handlers if handlers is not None else []
|
|||
|
|
|
|||
|
|
# 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)
|
|||
|
|
|
|||
|
|
# def add_file_handler(self, filename, encoding='utf-8'):
|
|||
|
|
# """添加文件处理器(解决中文乱码问题)"""
|
|||
|
|
# # 使用支持UTF-8编码的文件处理器
|
|||
|
|
# filepath = "log/" + filename
|
|||
|
|
# file_handler = logging.FileHandler(filepath, encoding=encoding)
|
|||
|
|
# file_handler.setFormatter(logging.Formatter(self.format))
|
|||
|
|
# self.handlers.append(file_handler)
|
|||
|
|
|
|||
|
|
# def setup(self):
|
|||
|
|
# """应用日志配置"""
|
|||
|
|
# logging.basicConfig(
|
|||
|
|
# level=self.level,
|
|||
|
|
# format=self.format,
|
|||
|
|
# handlers=self.handlers
|
|||
|
|
# )
|
|||
|
|
|
|||
|
|
|
|||
|
|
import logging
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
class LogHelper:
|
|||
|
|
def __init__(self,
|
|||
|
|
level=logging.INFO,
|
|||
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|||
|
|
handlers=None,
|
|||
|
|
log_dir="logs"):
|
|||
|
|
"""
|
|||
|
|
初始化日志配置
|
|||
|
|
|
|||
|
|
:param level: 日志级别,默认为 logging.INFO
|
|||
|
|
:param format: 日志格式字符串
|
|||
|
|
:param handlers: 日志处理器列表,默认为空(会自动添加控制台处理器)
|
|||
|
|
:param log_dir: 日志存储目录,默认为"logs"
|
|||
|
|
"""
|
|||
|
|
self.level = level
|
|||
|
|
self.format = format
|
|||
|
|
self.handlers = handlers if handlers is not None else []
|
|||
|
|
self.log_dir = log_dir
|
|||
|
|
# 确保日志目录存在
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
def setup(self):
|
|||
|
|
"""应用日志配置(自动添加日期文件处理器)"""
|
|||
|
|
# 如果未提供任何处理器,默认添加控制台和日期文件处理器
|
|||
|
|
if not self.handlers:
|
|||
|
|
self.add_console_handler()
|
|||
|
|
self._add_daily_file_handler()
|
|||
|
|
|
|||
|
|
# 应用配置
|
|||
|
|
logging.basicConfig(
|
|||
|
|
level=self.level,
|
|||
|
|
format=self.format,
|
|||
|
|
handlers=self.handlers
|
|||
|
|
)
|