本文档介绍视频转录API的日志系统,包括基本使用、配置、以及特定模块的日志说明。
# 方式 1: 直接使用全局 logger(推荐)
from video_transcript_api.utils import logger
logger.info("This is an info message")
logger.warning("This is a warning")
logger.error("This is an error")
logger.debug("This is a debug message")
# 方式 2: 使用 setup_logger(兼容旧代码)
from video_transcript_api.utils import setup_logger
log = setup_logger("module_name")
log.info("This is an info message")loguru 支持以下日志级别(从低到高):
logger.trace()- 最详细的调试信息logger.debug()- 调试信息logger.info()- 一般信息logger.success()- 成功信息(loguru 特有)logger.warning()- 警告信息logger.error()- 错误信息logger.critical()- 严重错误
本项目已成功将日志系统从 Python 标准 logging 模块迁移到 loguru。
迁移优势:
- 彩色控制台输出: 不同日志级别使用不同颜色,便于快速识别
- 更详细的上下文: 自动包含模块名、函数名和行号
- 异步文件写入: 使用
enqueue=True提高性能 - 自动日志轮转: 基于文件大小自动轮转
控制台输出(彩色):
2025-10-21 14:37:14 | INFO | module:function:42 - message
文件输出(纯文本):
2025-10-21 14:37:14 | INFO | video_transcript_api.utils.module:function:42 - message
日志配置在 config/config.json 中的 log 部分:
{
"log": {
"level": "INFO", // 日志级别: DEBUG, INFO, WARNING, ERROR
"file": "./data/logs/app.log", // 日志文件路径
"max_size": 10485760, // 单个文件最大大小(字节)
"backup_count": 5 // 保留的备份文件数量
}
}| 级别 | 说明 | 使用场景 |
|---|---|---|
| DEBUG | 详细的调试信息 | 开发环境、问题排查 |
| INFO | 重要的流程信息 | 生产环境默认级别 |
| WARNING | 警告信息,不影响主流程但需要注意 | 需要关注的非错误情况 |
| ERROR | 错误信息 | 错误发生时 |
| CRITICAL | 严重错误,导致无法继续 | 致命错误 |
生产环境(推荐):
{
"log": {
"level": "INFO"
}
}显示内容:
- ✅ 关键流程信息
- ✅ 警告和错误
- ❌ 详细的 DEBUG 信息
开发/调试环境:
{
"log": {
"level": "DEBUG"
}
}显示内容:
- ✅ 所有级别的日志
- ✅ 详细的执行步骤
- ✅ 每个句子的映射细节
# 使用 f-string 格式化
user_id = 12345
logger.info(f"User {user_id} logged in")
# loguru 会自动包含调用位置信息
# 输出: 2025-10-21 14:37:14 | INFO | module:function:42 - User 12345 logged intry:
risky_operation()
except Exception as e:
# 自动记录完整的异常堆栈
logger.exception("Operation failed")
# 或者
logger.error(f"Operation failed: {e}")FunASR 格式生成过程使用了分层的日志系统,不同级别的日志提供不同详细程度的信息。
成功场景:
[INFO] 开始生成 FunASR 兼容格式 JSON...
[INFO] 输入数据: text=243 字符, tokens=205, timestamps=205
[DEBUG] 开始创建 segments: text=243, tokens=205, timestamps=205
[DEBUG] Token 位置映射完成: reconstructed length=217
[DEBUG] 按标点分句: 6 个句子
[DEBUG] 对齐检查通过: diff=0
[DEBUG] 句子 1: 12 字符 -> tokens[0:11] -> 0.08s-1.50s
[DEBUG] 初始分段完成: 6 个 segments
[DEBUG] 长度优化完成: 3 个 segments
[INFO] Segments 生成完成: 3 个片段, 2/3 在目标范围内
[INFO] 成功创建 3 个 segments
[INFO] Segments 统计: 总时长=38.86s, 平均长度=81.0字符
[INFO] ✓ 已生成 FunASR 兼容文件: transcript_capswriter.json (3 个片段)
异常场景:
[WARNING] 警告: 文本为空,跳过 FunASR 格式生成
[WARNING] ✗ 生成 FunASR 兼容格式失败: text is empty
[WARNING] 提示: 主要转录文件(txt)已正常生成,可忽略此警告
# 1. 使用描述性的日志消息
logger.info("User authentication successful", user_id=user_id)
# 2. 在关键操作前后记录日志
logger.info("Starting video download...")
download_video(url)
logger.info("Video download completed")
# 3. 记录异常时使用 exception()
try:
process_data()
except Exception:
logger.exception("Failed to process data")# 1. 避免在循环中过度记录
for item in large_list:
logger.debug(f"Processing {item}") # 太多日志
# 2. 避免记录敏感信息
logger.info(f"User password: {password}") # 危险!
# 3. 避免使用 print() 代替日志
print("This is bad") # 应该使用 logger.info()- 日志级别: 生产环境使用 INFO 或 WARNING
- 异步写入: loguru 已配置异步文件写入 (
enqueue=True) - 条件日志: 只在必要时记录详细信息
if logger.level("DEBUG").no >= logger._core.min_level:
expensive_debug_info = compute_debug_info()
logger.debug(f"Debug info: {expensive_debug_info}")from loguru import logger
# 临时添加调试级别的控制台输出
debug_id = logger.add(
sys.stdout,
level="DEBUG",
format="{time} | {level} | {message}"
)
# 调试完成后移除
logger.remove(debug_id)# Linux/Mac
tail -f data/logs/app.log
# Windows
Get-Content data/logs/app.log -Tail 50 -Wait
# 查看特定模块的日志
grep "FunASR" logs/app.log
# 查看警告和错误
grep -E "WARNING|ERROR" logs/app.logA: 修改 config/config.json 中的 log.level 配置。
A: 默认在 data/logs/app.log。
A: 修改 src/video_transcript_api/utils/logger.py 中的 colorize=True 为 False。
A: 不需要。setup_logger() 已经兼容,返回 loguru logger。
A: 查看日志中的警告信息,检查是否有 "文本为空" 或 "tokens 为空" 警告。主流程不受影响,txt 文件会正常生成。
- 所有使用
setup_logger("name")的代码无需修改 setup_logger()现在返回 loguru 的全局 logger 实例- 支持多次调用
setup_logger(),但只配置一次
- 完成从 Python logging 到 loguru 的迁移
- 新增彩色控制台输出
- 新增详细的上下文信息(模块名、函数名、行号)
- 配置异步文件写入提升性能
- 使用 Python 标准 logging 模块
- 基本的文件日志功能