# Thunder/utils/logger.py import logging from logging.handlers import RotatingFileHandler, QueueHandler, QueueListener import os import queue import atexit import sys LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'logs') os.makedirs(LOG_DIR, exist_ok=True) LOG_FILE = os.path.join(LOG_DIR, 'bot.txt') logging._srcfile = None logging.logThreads = 0 logging.logProcesses = 0 log_queue = queue.Queue(maxsize=10000) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler = RotatingFileHandler(LOG_FILE, maxBytes=10*1024*1024, backupCount=5, encoding='utf-8') file_handler.setFormatter(formatter) console_handler = logging.StreamHandler(stream=sys.__stdout__) console_handler.setFormatter(formatter) console_handler.stream.reconfigure(encoding='utf-8', errors='replace') listener = QueueListener(log_queue, file_handler, console_handler, respect_handler_level=True) listener.start() logger = logging.getLogger('ThunderBot') logger.setLevel(logging.INFO) logger.propagate = False logger.addHandler(QueueHandler(log_queue)) atexit.register(listener.stop) __all__ = ['logger', 'LOG_FILE']