如何获取终端打印的所有信息含错误并写入文件用于Discord bot错误监控
Discord Bot全量终端输出与错误日志落地方案
方案1:启动时直接重定向输出(无需改代码,最快实现)
直接在启动bot的命令后加输出重定向规则即可,Linux系统下示例命令:python3 bot.py >> bot_run_$(date +%Y%m%d).log 2>&1 &
参数说明:
>> bot_run_$(date +%Y%m%d).log:以追加模式把输出写入按当天日期命名的日志文件,不会覆盖历史日志2>&1:将标准错误流(所有报错信息)合并到标准输出流,一起写入日志文件- 末尾的
&:让bot在后台运行,关闭终端也不会停止
方案2:代码内置日志模块(更灵活,适配已有错误处理器)
如果需要更精细化的日志控制,比如自动分割日志、保留错误堆栈、同时输出到终端和文件,可以直接在代码中引入日志模块,以下是Python实现示例:
- 导入依赖并配置全局日志
import logging import sys from logging.handlers import RotatingFileHandler # 初始化日志实例 bot_logger = logging.getLogger("discord_bot") bot_logger.setLevel(logging.DEBUG) # 定义日志格式:时间 + 日志级别 + 内容 log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") # 配置文件写入handler:单日志文件最大10MB,最多保留5份历史日志,自动滚动清理 file_handler = RotatingFileHandler( "bot_full.log", maxBytes=10 * 1024 * 1024, backupCount=5, encoding="utf-8" ) file_handler.setFormatter(log_format) bot_logger.addHandler(file_handler) # 可选:保留终端输出能力 console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(log_format) bot_logger.addHandler(console_handler)
- 适配现有专属错误处理器
在你已经写好的命令错误处理逻辑中,用logger.error方法输出错误即可自动写入日志,开启exc_info=True会自动记录完整错误堆栈,方便排查宕机原因:
@bot.event async def on_command_error(ctx, error): # 原有错误处理逻辑 bot_logger.error(f"命令执行出错:命令名={ctx.command}, 触发用户={ctx.author.id}, 错误内容={str(error)}", exc_info=True)
注意事项
- 如果使用PM2等进程管理工具启动bot,可以直接在进程配置中指定日志存储路径,自带日志分割、进程异常自动重启能力,更适合VPS生产环境使用
- 可配置定时任务扫描日志文件中的ERROR级别内容,发现新错误主动推送通知,无需手动排查
- 建议开启日志自动滚动清理,避免日志文件占满VPS磁盘空间
内容的提问来源于stack exchange,提问作者Zapperz0398
相关产品推荐
相关产品推荐

