| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # mt_spider/logger.py
- import os
- import logging
- from datetime import datetime
- from pathlib import Path
- from logging.handlers import TimedRotatingFileHandler
- LOG_DIR = os.path.join(os.path.dirname(__file__), '..', 'logs')
- os.makedirs(LOG_DIR, exist_ok=True)
- def _build_daily_log_path(name: str) -> str:
- # 每天一个独立文件:pdd_new2_2026-04-24.log
- date_str = datetime.now().strftime("%Y-%m-%d")
- return str(Path(LOG_DIR, f"{name}_{date_str}.log").resolve())
- def setup_logger(name: str = "pdd_spider"):
- logger = logging.getLogger()
- logger.setLevel(logging.INFO)
- fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
- target_file = _build_daily_log_path(name)
- # 控制台 handler 去重
- has_console = any(type(h) is logging.StreamHandler for h in logger.handlers)
- if not has_console:
- console = logging.StreamHandler()
- console.setFormatter(fmt)
- logger.addHandler(console)
- # 文件 handler 按“目标文件路径”去重
- has_target_file = False
- for handler in logger.handlers:
- if isinstance(handler, TimedRotatingFileHandler):
- base_filename = str(Path(getattr(handler, "baseFilename", "")).resolve())
- if base_filename == target_file:
- has_target_file = True
- break
- if not has_target_file:
- file_handler = TimedRotatingFileHandler(
- filename=target_file,
- when='midnight',
- interval=1,
- encoding='utf-8',
- backupCount=30
- )
- # 文件名已自带日期,这里保留 suffix 仅作兼容(通常不会触发)
- file_handler.suffix = "%Y-%m-%d"
- file_handler.setFormatter(fmt)
- logger.addHandler(file_handler)
- logger.propagate = False
- return logger
|