You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Loguru日志异常:错误信息仅输出至终端不写入日志文件

问题解决:Loguru在cron任务中缺失错误日志的处理方案

核心问题分析

  1. cron环境下相对路径易失效,导致Loguru写入的日志文件并非预期路径
  2. 未配置catch=True,Loguru无法捕获全局未处理异常,异常直接输出到sys.stderr而非日志文件
  3. 非交互式环境下的日志缓冲机制可能导致日志丢失
  4. bash脚本与Loguru同时写入同一日志文件,易引发写入冲突

解决方案步骤

1. 修复Loguru配置,确保路径正确并捕获异常

修改Python代码中的Loguru配置,使用绝对路径、添加catch=True和enqueue=True参数:

import sys
import os
from loguru import logger

# 计算绝对路径,避免cron环境下路径错误
script_dir = os.path.dirname(os.path.abspath(__file__))
# 根据项目目录结构调整root_dir层级
root_dir = os.path.dirname(os.path.dirname(script_dir))
log_file_path = os.path.join(root_dir, "backend", "cron_run.log")

logger.remove(0)
log_format = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS zz}</green> | <level>{level: <8}</level> | <yellow>Line {line: >4} ({file}):</yellow> <b>{message}</b>"

# 输出到stdout的配置
logger.add(
    sys.stdout,
    level=log_level,
    format=log_format,
    colorize=True,
    backtrace=True,
    diagnose=True,
    catch=True,  # 捕获全局未处理异常
    enqueue=True  # 异步写入避免缓冲丢失
)

# 输出到文件的配置
logger.add(
    log_file_path,
    rotation="2 MB",
    level=log_level,
    format=log_format,
    colorize=False,
    backtrace=True,
    diagnose=True,
    catch=True,
    enqueue=True
)

2. 修改bash脚本,避免日志文件冲突

移除bash中手动写入cron_run.log的逻辑,交由Loguru统一管理日志;如需记录启动时间,可写入单独文件:

#!/bin/bash 

# 获取脚本目录并切换到项目根目录
CURR_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd $CURR_DIR/..

# 激活虚拟环境
source backend/venv/bin/activate

# (可选)将启动时间写入单独日志文件,避免与Loguru冲突
start_log="backend/cron_start.log"
if [ -s $start_log ]; then
    echo -e "\n\n[$(TZ=America/Los_Angeles date)]" >> $start_log
else
    echo -e "[$(TZ=America/Los_Angeles date)]" >> $start_log
fi

# 运行Python程序
python3 backend/Scripts/recap/recap.py

关键参数说明

  • 绝对路径:cron默认工作目录为用户home目录,相对路径会导致Loguru写入错误位置,用os.path模块计算绝对路径确保日志写入预期文件
  • catch=True:拦截所有未被程序捕获的异常,将其转为Loguru的ERROR级别日志写入所有sink
  • enqueue=True:启用异步日志队列,解决非交互式环境下的输出缓冲问题,确保日志及时写入文件
  • 分离日志写入:避免bash与Loguru同时操作同一个文件,防止内容混乱或日志丢失

内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:50:20