comfyui-discord/lib/log.py

122 lines
4.5 KiB
Python

import sys
import logging
import logging.handlers
import re
LOG_SETUP = False
# The colors class below is from:
# https://www.geeksforgeeks.org/print-colors-python-terminal
class colors:
reset = "\033[0m"
bold = "\033[01m"
disable = "\033[02m"
underline = "\033[04m"
reverse = "\033[07m"
strikethrough = "\033[09m"
invisible = "\033[08m"
class fg:
white = "\033[97m"
black = "\033[30m"
red = "\033[31m"
green = "\033[32m"
orange = "\033[33m"
blue = "\033[34m"
purple = "\033[35m"
cyan = "\033[36m"
lightgrey = "\033[37m"
darkgrey = "\033[90m"
lightred = "\033[91m"
lightgreen = "\033[92m"
yellow = "\033[93m"
lightblue = "\033[94m"
pink = "\033[95m"
lightcyan = "\033[96m"
class bg:
black = "\033[40m"
red = "\033[41m"
green = "\033[42m"
orange = "\033[43m"
blue = "\033[44m"
purple = "\033[45m"
cyan = "\033[46m"
lightgrey = "\033[47m"
class PlainTextFormatter(logging.Formatter):
def format(self, record):
log_message = super().format(record)
log_message = re.sub(r"\033\[[0-9]{1,2}m", "", log_message)
return log_message
# Make it easy to log text:
def write(input_str, color=colors.fg.lightgrey, logger_name="discord.bot"):
global LOG_SETUP
if not LOG_SETUP:
logging.getLogger("discord").setLevel(logging.DEBUG)
logging.getLogger("discord.http").setLevel(logging.INFO)
line_format = "[{asctime}] [{threadName}] [{levelname}] {name}: {message}"
timestamp_format = "%Y-%m-%d %H:%M:%S"
console_formatter = logging.Formatter(colors.fg.darkgrey + line_format, timestamp_format, style="{")
file_formatter = PlainTextFormatter(line_format, timestamp_format, style="{")
prompt_formatter = PlainTextFormatter("[{asctime}] {message}", timestamp_format, style="{")
stats_formatter = PlainTextFormatter("{message}", timestamp_format, style="{")
file_handler = logging.handlers.RotatingFileHandler(filename="log.txt", encoding="utf-8", maxBytes=32 * 1024 * 1024, backupCount=10)
file_handler.setFormatter(file_formatter)
console_handler = logging.StreamHandler()
console_handler.setFormatter(console_formatter)
root_logger = logging.getLogger()
root_logger.addHandler(file_handler)
root_logger.addHandler(console_handler)
prompt_logger = logging.getLogger("discord.bot.prompts")
prompt_handler = logging.handlers.RotatingFileHandler(filename="prompts.log.txt", encoding="utf-8", maxBytes=32 * 1024 * 1024, backupCount=10)
prompt_handler.setFormatter(prompt_formatter)
prompt_logger.addHandler(prompt_handler)
stats_logger = logging.getLogger("discord.bot.stats")
stats_handler = logging.handlers.RotatingFileHandler(filename="stats.log.txt", encoding="utf-8", maxBytes=32 * 1024 * 1024, backupCount=10)
stats_handler.setFormatter(stats_formatter)
stats_logger.addHandler(stats_handler)
LOG_SETUP = True
logging.getLogger(logger_name).info(f"{color}{input_str}{colors.reset}")
def write_prompt(client=None, msg=None, chl=None, user=None, author=None, roles=None, rxn=None):
bot_name = client.user.name + "#" + client.user.discriminator
server_name = msg.channel.guild.name
category_name = msg.channel.category.name
channel_name = msg.channel.name
user_name = user.name
discrim = 0
if user.discriminator is not None:
discrim = user.discriminator
user_name = f"{user_name}#{discrim}"
message_content = msg.content
message_text = f"[{bot_name}/{server_name}/{category_name}/{channel_name}/{user_name}] {colors.fg.white}{message_content}"
write(message_text, logger_name="discord.bot.prompts")
def write_stat(key, value):
write(f"{key}: {value}", logger_name="discord.bot.stats")
def get_stat(key, sum=True):
value = 0
with open("stats.log.txt") as file:
lines = [line.strip() for line in file]
for line in lines:
match = re.search(key, line)
if match is not None:
value = value + float(match.group(1).strip())
return value