| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # vs_log_macros.py
- import logging
- from logging.handlers import RotatingFileHandler
- import os
- import sys
- # --- 日志配置 ---
- # 1. 确保日志目录存在
- LOG_DIR = "logs"
- if not os.path.exists(LOG_DIR):
- os.makedirs(LOG_DIR)
- LOG_FILE = os.path.join(LOG_DIR, "vs_app.log")
- # 2. 定义日志格式 (包含时间)
- # 格式示例:[2023-10-27 10:30:01] [INFO] [MainThread] [TAG] Message...
- LOG_FORMAT = '[%(asctime)s][%(levelname)s][%(threadName)s]%(message)s'
- DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
- # 3. 获取日志级别
- log_level_str = os.environ.get("VSC_LOG_LEVEL", "INFO").upper()
- log_level = getattr(logging, log_level_str, logging.INFO)
- # 4. 配置日志滚动参数 (支持通过环境变量覆盖)
- # 默认单个日志文件大小: 10 MB (10 * 1024 * 1024 bytes)
- MAX_BYTES = int(os.environ.get("VSC_LOG_MAX_BYTES", 10 * 1024 * 1024))
- # 默认保留的备份文件数量: 5
- BACKUP_COUNT = int(os.environ.get("VSC_LOG_BACKUP_COUNT", 10))
- # 5. 创建 handlers
- # 控制台 handler
- console_handler = logging.StreamHandler(sys.stdout)
- # 滚动文件 handler
- rolling_file_handler = RotatingFileHandler(
- filename=LOG_FILE,
- mode='a',
- maxBytes=MAX_BYTES,
- backupCount=BACKUP_COUNT,
- encoding='utf-8'
- )
- # 6. 配置 logging (同时输出到控制台和滚动文件)
- logging.basicConfig(
- level=log_level,
- format=LOG_FORMAT,
- datefmt=DATE_FORMAT,
- handlers=[
- console_handler,
- rolling_file_handler
- ]
- )
- # --- 宏定义 ---
- def VSC_INFO(tag, message, *args):
- """
- Usage: VSC_INFO("network", "Connected to %s:%d", ip, port)
- Output: [Time][INFO][Thread][network]Connected to 127.0.0.1:80
- """
- logging.info(f"[{tag}]{message}", *args)
- def VSC_DEBUG(tag, message, *args):
- logging.debug(f"[{tag}]{message}", *args)
- def VSC_WARN(tag, message, *args):
- logging.warning(f"[{tag}]{message}", *args)
- def VSC_ERROR(tag, message, *args):
- logging.error(f"[{tag}]{message}", *args)
|