60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from __future__ import annotations
|
|
from enum import Flag
|
|
import logging
|
|
from logging.handlers import RotatingFileHandler
|
|
import os
|
|
import sys
|
|
from typing import TYPE_CHECKING, Any, List
|
|
|
|
from bot import app_vars
|
|
|
|
if TYPE_CHECKING:
|
|
from bot import Bot
|
|
|
|
|
|
class Mode(Flag):
|
|
STDOUT = 1
|
|
FILE = 2
|
|
STDOUT_AND_FILE = STDOUT | FILE
|
|
|
|
|
|
def initialize_logger(bot: Bot) -> None:
|
|
config = bot.config.logger
|
|
logging.addLevelName(5, "PLAYER_DEBUG")
|
|
level = logging.getLevelName(config.level)
|
|
formatter = logging.Formatter(config.format)
|
|
handlers: List[Any] = []
|
|
try:
|
|
mode = (
|
|
Mode(config.mode)
|
|
if isinstance(config.mode, int)
|
|
else Mode.__members__[config.mode]
|
|
)
|
|
except KeyError:
|
|
sys.exit("Invalid log mode name")
|
|
if mode & Mode.FILE == Mode.FILE:
|
|
if bot.log_file_name:
|
|
file_name = bot.log_file_name
|
|
else:
|
|
file_name = config.file_name
|
|
if os.path.isdir(os.path.join(*os.path.split(file_name)[0:-1])):
|
|
file = file_name
|
|
else:
|
|
file = os.path.join(bot.config_manager.config_dir, file_name)
|
|
rotating_file_handler = RotatingFileHandler(
|
|
filename=file,
|
|
mode="a",
|
|
maxBytes=config.max_file_size * 1024,
|
|
backupCount=config.backup_count,
|
|
encoding="UTF-8",
|
|
)
|
|
rotating_file_handler.setFormatter(formatter)
|
|
rotating_file_handler.setLevel(level)
|
|
handlers.append(rotating_file_handler)
|
|
if mode & Mode.STDOUT == Mode.STDOUT:
|
|
stream_handler = logging.StreamHandler(sys.stdout)
|
|
stream_handler.setFormatter(formatter)
|
|
stream_handler.setLevel(level)
|
|
handlers.append(stream_handler)
|
|
logging.basicConfig(level=level, format=config.format, handlers=handlers)
|