This commit is contained in:
HuangHai
2026-01-14 07:31:31 +08:00
parent 8ab8ebb421
commit ab8ec615f2
18 changed files with 144 additions and 128 deletions

View File

@@ -272,36 +272,40 @@ def draw_rectangles(image_path, points, output_path=None):
def setup_logger(name, log_file=None):
"""
配置日志,支持同时输出到控制台和文件
统一存放在根目录的 Logs 文件夹下
配置日志,支持同时输出到控制台和文件。
使用供应商代号作为父级 Logger,所有子 Logger 继承其 Handler,
并通过 propagate=False 避免与根 Logger 重复。
"""
if log_file is None:
# 获取项目根目录 (aiData)
root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
log_dir = os.path.join(root_dir, "Logs")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# 统一使用供应商代号作为文件名
supplier_code = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
log_file = os.path.join(log_dir, f"{supplier_code}.log")
# 1. 获取供应商代号 (如 YeLiTe)
supplier_code = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
# 2. 获取父级 Logger 并配置
parent_logger = logging.getLogger(supplier_code)
parent_logger.setLevel(logging.INFO)
parent_logger.propagate = False # 禁止向上传递给 root logger,防止重复
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
if not parent_logger.handlers:
if log_file is None:
# 获取项目根目录 (aiData)
root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
log_dir = os.path.join(root_dir, "Logs")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
log_file = os.path.join(log_dir, f"{supplier_code}.log")
# 如果已经有 handler,不再添加
if logger.handlers:
return logger
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 控制台 Handler
ch = logging.StreamHandler()
ch.setFormatter(formatter)
parent_logger.addHandler(ch)
# 控制台 Handler
ch = logging.StreamHandler()
ch.setFormatter(formatter)
logger.addHandler(ch)
# 文件 Handler
fh = logging.FileHandler(log_file, encoding='utf-8')
fh.setFormatter(formatter)
parent_logger.addHandler(fh)
# 文件 Handler
fh = logging.FileHandler(log_file, encoding='utf-8')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
# 3. 返回子 Logger
if name == supplier_code:
return parent_logger
return logging.getLogger(f"{supplier_code}.{name}")