del train

This commit is contained in:
2026-06-09 10:57:28 +08:00
parent f47e7d914f
commit 07560304ca
6 changed files with 537 additions and 71 deletions

View File

@@ -1,24 +1,54 @@
import os
from datetime import datetime
from datetime import datetime, timedelta
import logging
from logging.handlers import RotatingFileHandler
import inspect # 新增导入
import inspect
from PubLibrary.InifileHelper import IniRead
# 全局配置
console_output = IniRead('system', 'console_output', '1')
log_level = IniRead('system', 'algo_log_level', 'INFO')
log_once_cache = set()
# 缓存已经创建过的logger避免重复创建handler
logger_cache = {}
LOG_RETENTION_DAYS = 3
LOG_DIR = './logs/'
LOG_FILE_PREFIX = 'algo_log_'
# 日志格式:时间 - 日志器名 - 级别 - 文件名:行号 - 函数名 - 日志内容
LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
def clean_old_logs():
"""清理超过指定天数的旧日志文件"""
try:
if not os.path.exists(LOG_DIR):
return
expire_date = datetime.now() - timedelta(days=LOG_RETENTION_DAYS)
for filename in os.listdir(LOG_DIR):
if not filename.startswith(LOG_FILE_PREFIX) or not filename.endswith('.log'):
continue
date_str = filename[len(LOG_FILE_PREFIX):-4]
try:
file_date = datetime.strptime(date_str, '%Y-%m-%d')
if file_date < expire_date:
file_path = os.path.join(LOG_DIR, filename)
os.remove(file_path)
print(f"清理过期日志: {file_path}")
except ValueError:
continue
except Exception as e:
print(f"清理旧日志异常: {str(e)}")
def init_module_logger(logger_name):
log_dir = './logs/'
os.makedirs(log_dir, exist_ok=True)
log_file = os.path.join(log_dir, f'algo_log_{datetime.now().strftime("%Y-%m-%d")}.log')
"""初始化日志器 + 清理旧日志"""
os.makedirs(LOG_DIR, exist_ok=True)
clean_old_logs()
current_date = datetime.now().strftime("%Y-%m-%d")
log_file = os.path.join(LOG_DIR, f"{LOG_FILE_PREFIX}{current_date}.log")
# 已创建直接返回
if logger_name in logger_cache:
return logger_cache[logger_name]
@@ -28,19 +58,18 @@ def init_module_logger(logger_name):
logger_cache[logger_name] = logger
return logger
# 文件输出处理器
file_handler = RotatingFileHandler(
log_file,
maxBytes=10*1024*1024,
maxBytes=10 * 1024 * 1024,
backupCount=10,
encoding='utf-8'
)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
formatter = logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 控制台输出
if console_output:
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
@@ -51,29 +80,35 @@ def init_module_logger(logger_name):
def algo_log(content, level="INFO", record_once=False):
# 向上回溯1层栈拿到调用algo_log的代码文件信息
frame = inspect.currentframe().f_back
file_path = frame.f_code.co_filename
# 提取py文件名不带后缀/带后缀自选)
file_name = os.path.basename(file_path) # 例zmqServer.py
# file_name = os.path.splitext(os.path.basename(file_path))[0] # 例zmqServer
"""
日志入口函数
自动记录:调用文件名、代码行号、所在函数
"""
# 回溯栈帧,获取真正调用 algo_log 的代码位置
# f_back(1) -> algo_log 自身f_back(2) -> 业务调用处
frame = inspect.currentframe().f_back.f_back
if not frame:
file_name = "unknown"
else:
file_name = os.path.basename(frame.f_code.co_filename)
logger = init_module_logger(file_name)
# 单次日志去重
if record_once:
log_key = f"{level.upper()}_{content}"
if log_key in log_once_cache:
return
log_once_cache.add(log_key)
# 日志级别分发
level_upper = level.upper()
if level_upper == "DEBUG":
logger.debug(content)
elif level_upper == "WARNING":
logger.warning(content)
elif level_upper == "ERROR":
logger.error(content)
elif level_upper == "FATAL":
logger.fatal(content)
else:
logger.info(content)
log_map = {
"DEBUG": logger.debug,
"WARNING": logger.warning,
"ERROR": logger.error,
"FATAL": logger.fatal,
"INFO": logger.info
}
log_func = log_map.get(level_upper, logger.info)
log_func(content)