Add debug command for switch logging level for telebot

Signed-off-by: UdoChudo <stream@udochudo.ru>
This commit is contained in:
Udo Chudo 2025-06-17 23:34:37 +05:00
parent ccb47d527f
commit 04d012759c

View File

@ -1,9 +1,10 @@
import logging import logging
from telebot import logger from telebot import logger as telebot_logger
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, Message from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, Message, CallbackQuery
from config import ADMINS_LIST from config import ADMINS_LIST
LOG_LEVELS = { LOG_LEVELS = {
"🔴 ERROR": logging.ERROR, "🔴 ERROR": logging.ERROR,
"🟠 WARNING": logging.WARNING, "🟠 WARNING": logging.WARNING,
@ -11,10 +12,26 @@ LOG_LEVELS = {
"🔵 DEBUG": logging.DEBUG "🔵 DEBUG": logging.DEBUG
} }
def register_handlers(bot,app, state_manager): def set_log_level(level: int):
@bot.message_handler(commands=['debug'], func=lambda message: message.chat.id in ADMINS_LIST) # Устанавливаем уровень для telebot и связанных библиотек
def debug_handler(message): telebot_logger.setLevel(level)
for handler in telebot_logger.handlers:
handler.setLevel(level)
logging.getLogger("pyzabbix").setLevel(level)
logging.getLogger("requests").setLevel(level)
# logging.getLogger("urllib3").setLevel(level)
# import http.client
# if level == logging.DEBUG:
# http.client.HTTPConnection.debuglevel = 1
# else:
# http.client.HTTPConnection.debuglevel = 0
def register_handlers(bot, app, state_manager):
@bot.message_handler(commands=['debug'], func=lambda message: message.chat.id in ADMINS_LIST)
def debug_handler(message: Message):
chat_id = message.chat.id chat_id = message.chat.id
markup = InlineKeyboardMarkup(row_width=1) markup = InlineKeyboardMarkup(row_width=1)
buttons = [InlineKeyboardButton(text=level, callback_data=f"setlog_{level}") for level in LOG_LEVELS] buttons = [InlineKeyboardButton(text=level, callback_data=f"setlog_{level}") for level in LOG_LEVELS]
@ -24,16 +41,16 @@ def register_handlers(bot,app, state_manager):
bot.send_message(chat_id, "Выберите уровень логирования", reply_markup=markup) bot.send_message(chat_id, "Выберите уровень логирования", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: call.data.startswith("setlog_")) @bot.callback_query_handler(func=lambda call: call.data.startswith("setlog_"))
def handle_log_level_callback(call): def handle_log_level_callback(call: CallbackQuery):
message_id = call.message.message_id
level_text = call.data.replace("setlog_", "") level_text = call.data.replace("setlog_", "")
chat_id = call.message.chat.id
message_id = call.message.message_id
if level_text in LOG_LEVELS: if level_text in LOG_LEVELS:
level = LOG_LEVELS[level_text] level = LOG_LEVELS[level_text]
logger.setLevel(level) set_log_level(level)
for handler in logger.handlers: bot.answer_callback_query(call.id, f"✅ Уровень логирования установлен: {level_text}")
handler.setLevel(level) bot.delete_message(chat_id, message_id)
bot.answer_callback_query(call.id, f"✅ Уровень логирования: {level_text}") bot.send_message(chat_id, f"📋 Логгер переведён в режим: {level_text}")
bot.delete_message(call.message.chat.id, message_id)
bot.send_message(call.message.chat.id, f"📋 Логгер переведён в режим: {level_text}")
else: else:
bot.answer_callback_query(call.id, "❌ Неизвестный уровень логирования") bot.answer_callback_query(call.id, "❌ Неизвестный уровень логирования")