teamtalkbot/bot/logger.py
Umiko f331b10358
Some checks are pending
Build-nightly / docker (push) Waiting to run
first commit.
2025-04-13 14:44:48 +07:00

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)