From f713276c6fb7379a7e2a98dbba3e2a94632c258a Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Wed, 20 Mar 2024 22:05:00 +0800 Subject: [PATCH] Added logs folder --- .gitignore | 1 + addons/settings.py | 25 +++++++++++++++---------- cogs/task.py | 4 ++-- main.py | 30 +++++++++++++++++++++++++----- settings Example.json | 7 ++++++- update.py | 2 +- voicelink/player.py | 4 ++-- 7 files changed, 52 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 8c2cfa7..0dc8222 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ Vocard.rar .env *.pyc +logs settings.json \ No newline at end of file diff --git a/addons/settings.py b/addons/settings.py index 9e52d7c..ee00ab2 100644 --- a/addons/settings.py +++ b/addons/settings.py @@ -1,22 +1,27 @@ import os + from dotenv import load_dotenv +from typing import ( + Dict, + List +) class Settings: - def __init__(self, settings: dict) -> None: + def __init__(self, settings: Dict) -> None: self.invite_link: str = "https://discord.gg/wRCgB7vBQv" - self.nodes: dict = settings.get("nodes", {}) + self.nodes: Dict = settings.get("nodes", {}) self.max_queue: int = settings.get("default_max_queue", 1000) self.bot_prefix: str = settings.get("prefix", "") - self.activity: dict = settings.get("activity", [{"listen": "/help"}]) - self.logging_level: str = settings.get("logging_level", "INFO") + self.activity: Dict = settings.get("activity", [{"listen": "/help"}]) + self.logging: Dict = settings.get("logging", {}) self.embed_color: str = int(settings.get("embed_color", "0xb3b3b3"), 16) - self.bot_access_user: list = settings.get("bot_access_user", []) - self.sources_settings: dict = settings.get("sources_settings", {}) - self.cooldowns_settings: dict = settings.get("cooldowns", {}) - self.aliases_settings: dict = settings.get("aliases", {}) - self.controller: dict = settings.get("default_controller", {}) + self.bot_access_user: List = settings.get("bot_access_user", []) + self.sources_settings: Dict = settings.get("sources_settings", {}) + self.cooldowns_settings: Dict = settings.get("cooldowns", {}) + self.aliases_settings: Dict = settings.get("aliases", {}) + self.controller: Dict = settings.get("default_controller", {}) self.lyrics_platform: str = settings.get("lyrics_platform", "A_ZLyrics").lower() - self.ipc_server: dict = settings.get("ipc_server", {}) + self.ipc_server: Dict = settings.get("ipc_server", {}) self.version: str = settings.get("version", "") class TOKENS: diff --git a/cogs/task.py b/cogs/task.py index 1bfc66c..8b9ca0d 100644 --- a/cogs/task.py +++ b/cogs/task.py @@ -120,8 +120,8 @@ class Task(commands.Cog): try: await report_channel.send(content=f"Report Before: ", file=errorFile) except Exception as e: - func.logger.error(f"Report could not be sent (Reason: {e})") + func.logger.error(f"Report could not be sent!", exc_info=e) func.ERROR_LOGS.clear() - + async def setup(bot: commands.Bot): await bot.add_cog(Task(bot)) diff --git a/main.py b/main.py index 2644019..5ae31df 100644 --- a/main.py +++ b/main.py @@ -11,6 +11,7 @@ from discord.ext import commands from web import IPCServer from motor.motor_asyncio import AsyncIOMotorClient from datetime import datetime +from logging.handlers import TimedRotatingFileHandler from voicelink import VoicelinkException from addons import Settings @@ -59,7 +60,8 @@ class Vocard(commands.Bot): func.logger.info(f"Successfully connected to [{db_name}] MongoDB!") except Exception as e: - raise Exception("Not able to connect MongoDB! Reason:", e) + func.logger.error("Not able to connect MongoDB! Reason:", exc_info=e) + exit() func.SETTINGS_DB = func.MONGO_DB[db_name]["Settings"] func.USERS_DB = func.MONGO_DB[db_name]["Users"] @@ -77,7 +79,7 @@ class Vocard(commands.Bot): await self.load_extension(f"cogs.{module[:-3]}") func.logger.info(f"Loaded {module[:-3]}") except Exception as e: - func.logger.error(f"Something went wrong while loading {module[:-3]} cog.", traceback.format_exc()) + func.logger.error(f"Something went wrong while loading {module[:-3]} cog.", exc_info=e) if func.settings.ipc_server.get("enable", False): await self.ipc.start() @@ -146,9 +148,23 @@ async def get_prefix(bot, message: discord.Message): settings = await func.get_settings(message.guild.id) return settings.get("prefix", func.settings.bot_prefix) -# Loading settings +# Loading settings and logger func.settings = Settings(func.open_json("settings.json")) -LOGGING_LEVEL = getattr(logging, func.settings.logging_level.upper()) + +LOG_SETTINGS = func.settings.logging + +if LOG_SETTINGS.get("enable", True): + log_path = LOG_SETTINGS.get("log_path", "./log") + if not os.path.exists(log_path): + os.makedirs(log_path) + + file_handler = TimedRotatingFileHandler(filename=f'{log_path}/vocard.log', encoding="utf-8", backupCount=LOG_SETTINGS.get("max-history", 30), when="d") + file_handler.namer = lambda name: name.replace(".log", "") + ".log" + file_handler.setFormatter(logging.Formatter('{asctime} [{levelname:<8}] {name}: {message}', '%Y-%m-%d %H:%M:%S', style='{')) + + discord_logger = logging.getLogger("discord") + discord_logger.addHandler(file_handler) + func.logger.addHandler(file_handler) # Setup the bot object intents = discord.Intents.default() @@ -173,4 +189,8 @@ bot = Vocard( if __name__ == "__main__": update.check_version(with_msg=True) - bot.run(func.tokens.token, root_logger=True, log_level=LOGGING_LEVEL) \ No newline at end of file + bot.run( + func.tokens.token, + log_level=getattr(logging, LOG_SETTINGS.get("level", "INFO").upper()), + root_logger=True + ) \ No newline at end of file diff --git a/settings Example.json b/settings Example.json index a0ccaed..ed456d3 100644 --- a/settings Example.json +++ b/settings Example.json @@ -12,7 +12,12 @@ "activity":[ {"listen": "/help"} ], - "logging_level": "INFO", + "logging": { + "level": "INFO", + "log_path": "./logs", + "max-history": 30, + "enable": true + }, "bot_access_user": [], "embed_color":"0xb3b3b3", "default_max_queue": 1000, diff --git a/update.py b/update.py index c4b9fbf..e3023d7 100644 --- a/update.py +++ b/update.py @@ -2,7 +2,7 @@ import requests, zipfile, os, shutil, argparse from io import BytesIO ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) -__version__ = "v2.6.9b1" +__version__ = "v2.6.9b2" GITHUB_API_URL = "https://api.github.com/repos/ChocoMeow/Vocard/releases/latest" VOCARD_URL = "https://github.com/ChocoMeow/Vocard/archive/" diff --git a/voicelink/player.py b/voicelink/player.py index 02d4ee5..0ba1fdb 100644 --- a/voicelink/player.py +++ b/voicelink/player.py @@ -358,7 +358,7 @@ class Player(VoiceProtocol): try: await self.play(track, start=track.position) except Exception as e: - self._logger.error(f"Something went wrong while playing music in {self.guild.name}({self.guild.id})", e) + self._logger.error(f"Something went wrong while playing music in {self.guild.name}({self.guild.id})", exc_info=e) await sleep(5) return await self.do_next() @@ -400,7 +400,7 @@ class Player(VoiceProtocol): pass except Exception as e: - self._logger.error(f"Something went wrong while sending music controller to {self.guild.name}({self.guild.id})", e) + self._logger.error(f"Something went wrong while sending music controller to {self.guild.name}({self.guild.id})", exc_info=e) pass self.updating = False