← Все вопросы
Как нормально логировать ошибки Discord-бота, чтобы он не падал от любой команды?
6
Бот иногда тихо перестаёт отвечать или падает, а я не понимаю почему — в консоли каша или вообще пусто. Как сделать нормальное логирование и ловить ошибки команд, чтобы видеть, что сломалось?
2 ответа
11
✓ Принятый ответ — помог автору
Два уровня. Первый — общий обработчик ошибок команд через on_command_error:
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.CommandNotFound):
return # неизвестная команда — молча игнорим
await ctx.send('Упс, что-то пошло не так.')
raise error # пробросим, чтобы увидеть в логах
Второй — нормальное логирование вместо print:
import logging
logging.basicConfig(
level=logging.INFO,
handlers=[logging.FileHandler('bot.log', encoding='utf-8'),
logging.StreamHandler()]
)
Теперь discord.py и твои логи пишутся и в консоль, и в файл bot.log, и ошибки конкретной команды не роняют бота целиком.
3
Для отдельной команды можно повесить персональный обработчик через @имякоманды.error — удобно, когда у конкретной команды свои частые ошибки (например нет прав или неверный аргумент).
Ваш ответ
, чтобы ответить на вопрос.