import logging import os from logging.handlers import TimedRotatingFileHandler # 获取项目根目录并创建 logs 目录 base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) log_dir = os.path.join(base_dir, 'logs') os.makedirs(log_dir, exist_ok=True) log_file = os.path.join(log_dir, 'app.log') formatter = logging.Formatter( '[%(asctime)s] %(name)s [%(levelname)s] %(filename)s[line:%(lineno)d]: %(message)s' ) # 按天切分的文件处理器,保留最近 7 天 file_handler = TimedRotatingFileHandler( log_file, when='midnight', interval=1, backupCount=7, encoding='utf-8' ) file_handler.setFormatter(formatter) console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) # 获取标准 logger logger = logging.getLogger('ProxyPool') # 尝试从配置读取日志级别,默认 INFO try: from app.core.config import settings log_level = getattr(logging, settings.log_level.upper(), logging.INFO) except Exception: log_level = logging.INFO logger.setLevel(log_level) file_handler.setLevel(log_level) console_handler.setLevel(log_level) # 防止重复添加 handler(如模块重导入) if not logger.handlers: logger.addHandler(file_handler) logger.addHandler(console_handler)