|
|
@@ -1,99 +0,0 @@
|
|
|
-# logger_config.py
|
|
|
-import logging
|
|
|
-import os
|
|
|
-from logging import handlers
|
|
|
-from datetime import datetime
|
|
|
-import sys
|
|
|
-
|
|
|
-
|
|
|
-class ColorFormatter(logging.Formatter):
|
|
|
- """自定义彩色日志格式化器(仅控制台输出带颜色,文件日志无颜色)"""
|
|
|
- # 终端颜色编码
|
|
|
- COLORS = {
|
|
|
- 'DEBUG': '\033[36m', # 青色
|
|
|
- 'INFO': '\033[32m', # 绿色
|
|
|
- 'WARNING': '\033[33m', # 黄色
|
|
|
- 'ERROR': '\033[31m', # 红色
|
|
|
- 'CRITICAL': '\033[41m', # 红底白字
|
|
|
- 'RESET': '\033[0m' # 重置颜色
|
|
|
- }
|
|
|
-
|
|
|
- # 日志级别对应图标
|
|
|
- ICONS = {
|
|
|
- 'DEBUG': '🐞',
|
|
|
- 'INFO': '✅',
|
|
|
- 'WARNING': '⚠️',
|
|
|
- 'ERROR': '❌',
|
|
|
- 'CRITICAL': '💥'
|
|
|
- }
|
|
|
-
|
|
|
- def format(self, record):
|
|
|
- # 为控制台添加颜色和图标,文件日志保持纯文本
|
|
|
- if hasattr(sys.stderr, 'isatty') and sys.stderr.isatty():
|
|
|
- # 彩色格式:[时间] [图标 级别] [模块:行号] 信息
|
|
|
- color = self.COLORS.get(record.levelname, self.COLORS['RESET'])
|
|
|
- icon = self.ICONS.get(record.levelname, '')
|
|
|
- record.levelname = f"{color}{icon} {record.levelname}{self.COLORS['RESET']}"
|
|
|
- record.msg = f"{color}{record.msg}{self.COLORS['RESET']}"
|
|
|
-
|
|
|
- # 调用父类格式化方法
|
|
|
- return super().format(record)
|
|
|
-
|
|
|
-def setup_logger(level=logging.DEBUG):
|
|
|
- """
|
|
|
- 配置日志器:
|
|
|
- 1. 自动创建logs文件夹
|
|
|
- 2. 日志文件带时间戳,按大小分割(10MB/个,保留5个备份)
|
|
|
- 3. 控制台输出带颜色/图标,文件日志纯文本(更规范)
|
|
|
- 4. 支持自定义日志级别(默认DEBUG,可传INFO/WARNING等)
|
|
|
- 5. 日志格式包含:时间、级别、进程ID、模块、行号、信息
|
|
|
- """
|
|
|
- # 1. 自动创建logs文件夹(不存在则创建)
|
|
|
- log_dir = "logs"
|
|
|
- os.makedirs(log_dir, exist_ok=True) # exist_ok=True:文件夹已存在时不报错
|
|
|
-
|
|
|
- # 2. 生成时间戳(格式:年月日_时分秒,如20260112_164530)
|
|
|
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") # 生成时间戳
|
|
|
- # 3. 定义带时间戳的日志文件路径
|
|
|
- log_file = os.path.join(log_dir, f"yjj_crawl_log_{timestamp}.txt")
|
|
|
-
|
|
|
- # 4. 创建日志器并设置级别
|
|
|
- logger = logging.getLogger("yjj_crawler")
|
|
|
- logger.setLevel(level)
|
|
|
- logger.propagate = False # 避免重复输出
|
|
|
-
|
|
|
- # 清空已有处理器(防止重复添加)
|
|
|
- if logger.handlers:
|
|
|
- logger.handlers.clear()
|
|
|
-
|
|
|
- # 5. 配置文件处理器(美化格式,保存到logs文件夹)
|
|
|
- file_handler = handlers.RotatingFileHandler(
|
|
|
- log_file,
|
|
|
- encoding="utf-8",
|
|
|
- maxBytes=10*1024*1024, # 单个日志文件最大10MB
|
|
|
- backupCount=5, # 最多保留5个备份日志文件
|
|
|
- mode="a" # 追加模式
|
|
|
- )
|
|
|
- # 文件日志美化格式:时间戳 | 级别 | 信息(带图标/模块标注)
|
|
|
- file_formatter = logging.Formatter(
|
|
|
- "[%(asctime)s] [%(levelname)-8s] [PID:%(process)d] [%(module)s:%(lineno)d] %(message)s",
|
|
|
- datefmt="%Y-%m-%d %H:%M:%S" # 精确到微秒
|
|
|
- )
|
|
|
- file_handler.setFormatter(file_formatter)
|
|
|
- logger.addHandler(file_handler)
|
|
|
- # 5. 配置控制台处理器(简洁格式,仅输出信息)
|
|
|
- console_handler = logging.StreamHandler()
|
|
|
- console_formatter = ColorFormatter(
|
|
|
- "[%(asctime)s] %(levelname)-8s %(message)s",
|
|
|
- datefmt="%H:%M:%S" # 控制台仅显示时分秒,更简洁
|
|
|
- )
|
|
|
- console_handler.setFormatter(console_formatter)
|
|
|
-
|
|
|
- # 6. 添加处理器到日志器
|
|
|
- console_handler.setFormatter(console_formatter)
|
|
|
- logger.addHandler(console_handler)
|
|
|
-
|
|
|
- return logger
|
|
|
-
|
|
|
-# 创建全局可调用的logger对象
|
|
|
-logger = setup_logger(level=logging.INFO)
|