Fido2603/DiscordGods

View on GitHub
Util/logger.py

Summary

Maintainability
A
35 mins
Test Coverage
import os, sys
from discord import Embed
import logging
from logging.handlers import TimedRotatingFileHandler
import datetime


def setup_logger():
    if not os.path.exists("logs"):
        os.makedirs("logs")

    formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s', datefmt='%H:%M:%S')
    handler = TimedRotatingFileHandler("logs/gods.log", when="midnight", interval=1, encoding="UTF-8")
    handler.suffix = "%Y%m%d"
    handler.setFormatter(formatter)
    screen_handler = logging.StreamHandler(stream=sys.stdout)
    screen_handler.setFormatter(formatter)
    logger = logging.getLogger("gods")
    logger.addHandler(handler)
    logger.addHandler(screen_handler)
    logger.setLevel(logging.DEBUG)


async def log(message, bot, level="INFO", debug=""):
    if (os.getenv('debugEnabled') == "False") and (level == "DEBUG"):
        return

    channel = bot.get_channel(int(os.getenv('botlog')))
    time = datetime.datetime.now().strftime('%H:%M:%S')

    if level == "DEBUG":
        levelemote = "🔧"
    elif level == "ERROR":
        levelemote = "❌"
    elif level == "WARNING":
        levelemote = "❗"
    elif level == "CRITICAL":
        levelemote = "🔥"
    else:
        levelemote = "🔎"

    await channel.send("`[" + time + "]` **" + levelemote + " " + level + ":** " + message)
    if debug == "":
        logDebug(message, level)
        return
    logDebug(debug, level)


def logDebug(message, level="INFO"):
    if (os.getenv('debugEnabled') == "False") and (level == "DEBUG"):
        return

    logger = logging.getLogger("gods")
    if level == "DEBUG":
        logger.debug(message)
    elif level == "ERROR":
        logger.error(message)
    elif level == "WARNING":
        logger.warning(message)
    elif level == "CRITICAL":
        logger.critical(message)
    else:
        logger.info(message)


async def logEmbed(color, description, bot, debug=""):
    channel = bot.get_channel(int(os.getenv('botlog')))
    await channel.send(embed=Embed(color=color, description=description, timestamp=datetime.datetime.now()))
    if debug == "":
        logDebug(description)
        return
    logDebug(debug)