|
2 | 2 | import os
|
3 | 3 | import re
|
4 | 4 | import sys
|
| 5 | +import _string |
5 | 6 |
|
| 7 | +from difflib import get_close_matches |
| 8 | +from enum import IntEnum |
6 | 9 | from logging import FileHandler, StreamHandler
|
7 | 10 | from logging.handlers import RotatingFileHandler
|
| 11 | +from string import Formatter |
8 | 12 | from typing import Optional, Union
|
9 | 13 |
|
| 14 | +import discord |
| 15 | +from discord.ext import commands |
| 16 | + |
10 | 17 |
|
11 | 18 | try:
|
12 |
| - from colorama import Fore, Style, init as color_init |
| 19 | + from colorama import Fore, Style |
13 | 20 | except ImportError:
|
14 | 21 | Fore = Style = type("Dummy", (object,), {"__getattr__": lambda self, item: ""})()
|
15 |
| -else: |
16 |
| - color_init() |
17 | 22 |
|
18 | 23 |
|
19 | 24 | if ".heroku" in os.environ.get("PYTHONHOME", ""):
|
@@ -162,26 +167,58 @@ def getLogger(name=None) -> ModmailLogger:
|
162 | 167 | return logger
|
163 | 168 |
|
164 | 169 |
|
165 |
| -def configure_logging(name, level: Optional[int] = None): |
| 170 | +def configure_logging(bot, log_dir: str) -> None: |
166 | 171 | global ch_debug, log_level
|
167 |
| - ch_debug = create_log_handler(name, rotating=True) |
| 172 | + logger = getLogger(__name__) |
| 173 | + level_text = bot.config["log_level"].upper() |
| 174 | + logging_levels = { |
| 175 | + "CRITICAL": logging.CRITICAL, |
| 176 | + "ERROR": logging.ERROR, |
| 177 | + "WARNING": logging.WARNING, |
| 178 | + "INFO": logging.INFO, |
| 179 | + "DEBUG": logging.DEBUG, |
| 180 | + } |
| 181 | + logger.line() |
| 182 | + |
| 183 | + level = logging_levels.get(level_text) |
| 184 | + if level is None: |
| 185 | + level = bot.config.remove("log_level") |
| 186 | + logger.warning("Invalid logging level set: %s.", level_text) |
| 187 | + logger.warning("Using default logging level: INFO.") |
| 188 | + else: |
| 189 | + logger.info("Logging level: %s", level_text) |
168 | 190 |
|
169 |
| - if level is not None: |
170 |
| - log_level = level |
| 191 | + logger.info("Log file: %s", bot.log_file_name) |
171 | 192 |
|
172 |
| - ch.setLevel(log_level) |
| 193 | + ch_debug = create_log_handler(bot.log_file_name, rotating=True) |
173 | 194 |
|
174 |
| - for logger in loggers: |
175 |
| - logger.setLevel(log_level) |
176 |
| - logger.addHandler(ch_debug) |
| 195 | + log_level = level |
177 | 196 |
|
| 197 | + ch.setLevel(log_level) |
178 | 198 |
|
179 |
| -from string import Formatter |
180 |
| -from difflib import get_close_matches |
181 |
| -from enum import IntEnum |
182 |
| -import _string |
183 |
| -import discord |
184 |
| -from discord.ext import commands |
| 199 | + for log in loggers: |
| 200 | + log.setLevel(log_level) |
| 201 | + log.addHandler(ch_debug) |
| 202 | + |
| 203 | + # Set up discord.py logging |
| 204 | + d_level = logging_levels.get(bot.config["discord_log_level"].upper(), logging.INFO) |
| 205 | + d_logger = logging.getLogger("discord") |
| 206 | + d_logger.setLevel(d_level) |
| 207 | + |
| 208 | + non_verbose_log_level = d_level if d_level != logging.DEBUG else logging.INFO |
| 209 | + stream_handler = create_log_handler(level=non_verbose_log_level) |
| 210 | + file_handler = create_log_handler(bot.log_file_name, rotating=True, level=non_verbose_log_level) |
| 211 | + logger.info("Discord logging level: %s.", logging.getLevelName(non_verbose_log_level)) |
| 212 | + d_logger.addHandler(stream_handler) |
| 213 | + d_logger.addHandler(file_handler) |
| 214 | + |
| 215 | + # file handler for discord.py debug level |
| 216 | + if d_level == logging.DEBUG: |
| 217 | + dlog_file = os.path.join(log_dir, "discord.log") |
| 218 | + debug_handler = create_log_handler(dlog_file, level=logging.DEBUG, mode="w", encoding="utf-8") |
| 219 | + logger.info("Discord logger DEBUG level is enabled. Log file: %s", dlog_file) |
| 220 | + d_logger.addHandler(debug_handler) |
| 221 | + logger.debug("Successfully configured logging.") |
185 | 222 |
|
186 | 223 |
|
187 | 224 | class InvalidConfigError(commands.BadArgument):
|
|
0 commit comments