import logging import os import inspect from datetime import datetime from pathlib import Path # MySQL 配置 db_config = { 'host': '172.18.0.4', 'user': 'root', 'password': 'mysqlpw', 'database': 'stockdb' } log_dir_prefix = '../log' global_share_data_dir = '/root/sharedata' global_stock_data_dir = '/root/hostdir/stock_data' # 获取log目录 def get_log_directory(): """ 获取项目根目录下的 log 目录路径。如果 log 目录不存在,则自动创建。 """ # 获取当前文件所在目录 current_dir = Path(__file__).resolve().parent # 找到项目根目录,假设项目根目录下有一个 log 文件夹 project_root = current_dir while project_root.name != 'src' and project_root != project_root.parent: project_root = project_root.parent project_root = project_root.parent # 回到项目根目录 # 确保 log 目录存在 log_dir = project_root / 'log' log_dir.mkdir(parents=True, exist_ok=True) return log_dir def get_caller_filename(): # 获取调用 setup_logging 的脚本文件名 caller_frame = inspect.stack()[2] caller_filename = os.path.splitext(os.path.basename(caller_frame.filename))[0] return caller_filename # 设置日志配置 def setup_logging(log_filename=None): # 如果未传入 log_filename,则使用当前脚本名称作为日志文件名 if log_filename is None: caller_filename = get_caller_filename() common_log_dir = get_log_directory() current_date = datetime.now().strftime('%Y%m%d') # 拼接 log 文件名,将日期加在扩展名前 log_filename = f'{common_log_dir}/{caller_filename}_{current_date}.log' logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] (%(funcName)s) - %(message)s', handlers=[ logging.FileHandler(log_filename), logging.StreamHandler() ])