From 897c0cc987395e8888818f3f10d8b9ff43b9dffe Mon Sep 17 00:00:00 2001 From: Ev-1 <33662061+Ev-1@users.noreply.github.com> Date: Mon, 3 Oct 2022 22:05:37 +0200 Subject: [PATCH] Add colors and formatting to bot log, remove print statements --- bot.py | 10 ++-- musicbot/cogs/helpformatter/helpformatter.py | 5 +- musicbot/utils/logger.py | 48 +++++++++++++++----- musicbot/utils/mixplayer/mixqueue.py | 9 ++-- 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/bot.py b/bot.py index 1a3e4db..30e6620 100644 --- a/bot.py +++ b/bot.py @@ -86,9 +86,11 @@ class Bot(commands.Bot): except Exception: self.logger.exception("Loading of extension %s failed" % extension) - print(f'\nLogged in as: {self.user.name}' + - f' in {len(self.guilds)} servers.') - print(f'Version: {discord.__version__}\n') + self.logger.info("") + if self.user: + self.logger.info(f'Logged in as: {self.user.name}' + + f' in {len(self.guilds)} servers.') + self.logger.info(f'Version: {discord.__version__}\n') self.logger.debug("Bot Ready\n\n\n") self.session = aiohttp.ClientSession(loop=self.loop) @@ -102,7 +104,7 @@ class Bot(commands.Bot): except Exception as e: tb = e.__traceback__ traceback.print_tb(tb) - print(e) + self.logger.error(e) def run_bot(datadir, debug: bool = False): diff --git a/musicbot/cogs/helpformatter/helpformatter.py b/musicbot/cogs/helpformatter/helpformatter.py index 62ec5b0..db49186 100644 --- a/musicbot/cogs/helpformatter/helpformatter.py +++ b/musicbot/cogs/helpformatter/helpformatter.py @@ -57,8 +57,9 @@ async def coghelper(ctx, cog, ignore_subcommands=True): if cmd_dict: paginator.add_command_field(cmd_dict) except Exception as e: - print(e) - print("Help failed for command: ", cmd) + logger = ctx.bot.logger.getChild("helpformat") + logger.exception(e) + logger.error("Help failed for command: ", cmd) paginator.add_page_indicator(ctx.localizer, "{pageindicator}", _prefix=ctx.prefix) return paginator diff --git a/musicbot/utils/logger.py b/musicbot/utils/logger.py index 9a921b0..8dfbfa4 100644 --- a/musicbot/utils/logger.py +++ b/musicbot/utils/logger.py @@ -3,8 +3,33 @@ import logging.handlers import os +class ConsoleFormatter(logging.Formatter): + + def format(self, record): + gray = "\x1b[38;20m" + green = "\x1b[32;20m" + yellow = "\x1b[33;20m" + blue = "\x1b[34;20m" + red = "\x1b[31;20m" + reset = "\x1b[0m" + match record.levelno: + case logging.DEBUG: + color = yellow + case logging.INFO: + color = green + case logging.ERROR: + color = red + case _: + color = gray + format = blue + "[%(asctime)s] " + reset + "%(name)-20s" + \ + "[" + color + "%(levelname)-8s" + reset + "] " + "%(message)s" + formatter = logging.Formatter(format) + return formatter.format(record) + + class BotLogger(object): def __init__(self, debug=None, data_location=None): + self.log_location = data_location self.log_level = debug @@ -14,25 +39,26 @@ class BotLogger(object): else: self.log_level = logging.INFO - self.bot_logger = logging.getLogger("logger") + self.bot_logger = logging.getLogger("musicbot") self.bot_logger.setLevel(logging.DEBUG) - log_formatter = logging.Formatter("%(asctime)s:%(name)s:%(levelname)s:%(message)s") + console_formatter = ConsoleFormatter() + file_format = logging.Formatter("[%(asctime)s] %(name)-20s[%(levelname)-8s]%(message)s") + + console_handler = logging.StreamHandler() + console_handler.setLevel(self.log_level) + console_handler.setFormatter(console_formatter) + + self.bot_logger.addHandler(console_handler) if self.log_location is not None: if not os.path.isdir(self.log_location): os.makedirs(self.log_location) - print(f"Creating logging directory: {self.log_location}") + self.bot_logger.info(f"Creating logging directory: {self.log_location}") if self.log_level: - print(f"Logging directory: {self.log_location}") + self.bot_logger.info(f"Logging directory: {self.log_location}") file_logger = logging.handlers.RotatingFileHandler(f'{self.log_location}/bot.log', mode='a', maxBytes=5000, encoding="UTF-8", delay=0, backupCount=5) file_logger.setLevel(self.log_level) - file_logger.setFormatter(log_formatter) + file_logger.setFormatter(file_format) self.bot_logger.addHandler(file_logger) - - console_handler = logging.StreamHandler() - console_handler.setLevel(self.log_level) - console_handler.setFormatter(log_formatter) - - self.bot_logger.addHandler(console_handler) diff --git a/musicbot/utils/mixplayer/mixqueue.py b/musicbot/utils/mixplayer/mixqueue.py index 2a552ee..5bbc067 100644 --- a/musicbot/utils/mixplayer/mixqueue.py +++ b/musicbot/utils/mixplayer/mixqueue.py @@ -1,6 +1,7 @@ # Discord Packages from lavalink import AudioTrack +import logging from collections import OrderedDict, deque from itertools import chain, cycle, islice from random import shuffle @@ -28,6 +29,8 @@ class MixQueue: self._history = deque(maxlen=11) # 10 + current self.looping = False self.loop_offset = 0 + self.logger = logging.getLogger("musicbot").getChild("Queue") + self.logger = self.logger.getChild("Queue") def __str__(self): tmp = '' @@ -91,9 +94,9 @@ class MixQueue: self._history.append(next_track) return next_track except IndexError as e: - print(e) - print(self.loop_offset) - print(len(self)) + self.logger.error(e) + self.logger.error(self.loop_offset) + self.logger.error(len(self)) self.loop_offset = min(self.loop_offset, len(self)-1) else: next_track = self.queues[self.first_queue].pop(0)