Skip to content

Commit da4b2b1

Browse files
committedMar 21, 2023
Revert:
- Restore import orders - Logging stuff is now completely handled in `core.models.configure_logging`
1 parent b05f464 commit da4b2b1

File tree

4 files changed

+82
-76
lines changed

4 files changed

+82
-76
lines changed
 

Diff for: ‎bot.py

+18-59
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,6 @@
11
__version__ = "4.0.2"
22

33

4-
# early import to initialize colorama
5-
from core.models import (
6-
DMDisabled,
7-
HostingMethod,
8-
InvalidConfigError,
9-
PermissionLevel,
10-
SafeFormatter,
11-
create_log_handler,
12-
configure_logging,
13-
getLogger,
14-
)
15-
164
import asyncio
175
import copy
186
import hashlib
@@ -37,15 +25,31 @@
3725
from pkg_resources import parse_version
3826

3927

28+
try:
29+
# noinspection PyUnresolvedReferences
30+
from colorama import init
31+
32+
init()
33+
except ImportError:
34+
pass
35+
4036
from core import checks
4137
from core.changelog import Changelog
4238
from core.clients import ApiClient, MongoDBClient, PluginDatabaseClient
4339
from core.config import ConfigManager
40+
from core.models import (
41+
DMDisabled,
42+
HostingMethod,
43+
InvalidConfigError,
44+
PermissionLevel,
45+
SafeFormatter,
46+
configure_logging,
47+
getLogger,
48+
)
4449
from core.thread import ThreadManager
4550
from core.time import human_timedelta
4651
from core.utils import extract_block_timestamp, normalize_alias, parse_alias, truncate, tryint
4752

48-
4953
logger = getLogger(__name__)
5054

5155
temp_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "temp")
@@ -80,7 +84,7 @@ def __init__(self):
8084
self.threads = ThreadManager(self)
8185

8286
self.log_file_name = os.path.join(temp_dir, f"{self.token.split('.')[0]}.log")
83-
self._configure_logging()
87+
configure_logging(self, temp_dir)
8488

8589
self.plugin_db = PluginDatabaseClient(self) # Deprecated
8690
self.startup()
@@ -173,51 +177,6 @@ async def load_extensions(self):
173177
logger.exception("Failed to load %s.", cog)
174178
logger.line("debug")
175179

176-
def _configure_logging(self):
177-
level_text = self.config["log_level"].upper()
178-
logging_levels = {
179-
"CRITICAL": logging.CRITICAL,
180-
"ERROR": logging.ERROR,
181-
"WARNING": logging.WARNING,
182-
"INFO": logging.INFO,
183-
"DEBUG": logging.DEBUG,
184-
}
185-
logger.line()
186-
187-
log_level = logging_levels.get(level_text)
188-
if log_level is None:
189-
log_level = self.config.remove("log_level")
190-
logger.warning("Invalid logging level set: %s.", level_text)
191-
logger.warning("Using default logging level: INFO.")
192-
else:
193-
logger.info("Logging level: %s", level_text)
194-
195-
logger.info("Log file: %s", self.log_file_name)
196-
configure_logging(self.log_file_name, log_level)
197-
198-
# Set up discord.py logging
199-
# repeat the step
200-
level_text = os.environ.get("LOG_DISCORD", "INFO").upper()
201-
log_level = logging_levels.get(level_text, logging.INFO)
202-
logger.info("Setting up discord logger, logging level: %s.", logging.getLevelName(log_level))
203-
d_logger = logging.getLogger("discord")
204-
d_logger.setLevel(log_level)
205-
is_debug = not log_level > logging.DEBUG
206-
stream = create_log_handler(level=log_level if not is_debug else logging.INFO)
207-
d_logger.addHandler(stream)
208-
file_handler = create_log_handler(
209-
self.log_file_name, rotating=True, level=log_level if not is_debug else logging.INFO
210-
)
211-
d_logger.addHandler(file_handler)
212-
213-
# internal discord.py debug logging
214-
if is_debug:
215-
debug_handler = create_log_handler("discord.log", level=log_level, mode="w", encoding="utf-8")
216-
logger.info("Discord logger DEBUG level is enabled. Log file: %s", "discord.log")
217-
d_logger.addHandler(debug_handler)
218-
219-
logger.debug("Successfully configured logging.")
220-
221180
@property
222181
def version(self):
223182
return parse_version(__version__)

Diff for: ‎core/config.py

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class ConfigManager:
177177
"disable_updates": False,
178178
# Logging
179179
"log_level": "INFO",
180+
"discord_log_level": "INFO",
180181
# data collection
181182
"data_collection": True,
182183
}

Diff for: ‎core/config_help.json

+9
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,15 @@
11291129
"This configuration can only to be set through `.env` file or environment (config) variables."
11301130
]
11311131
},
1132+
"discord_log_level": {
1133+
"default": "INFO",
1134+
"description": "The `discord.py` library logging level for logging to stdout.",
1135+
"examples": [
1136+
],
1137+
"notes": [
1138+
"This configuration can only to be set through `.env` file or environment (config) variables."
1139+
]
1140+
},
11321141
"enable_plugins": {
11331142
"default": "Yes",
11341143
"description": "Whether plugins should be enabled and loaded into Modmail.",

Diff for: ‎core/models.py

+54-17
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@
22
import os
33
import re
44
import sys
5+
import _string
56

7+
from difflib import get_close_matches
8+
from enum import IntEnum
69
from logging import FileHandler, StreamHandler
710
from logging.handlers import RotatingFileHandler
11+
from string import Formatter
812
from typing import Optional, Union
913

14+
import discord
15+
from discord.ext import commands
16+
1017

1118
try:
12-
from colorama import Fore, Style, init as color_init
19+
from colorama import Fore, Style
1320
except ImportError:
1421
Fore = Style = type("Dummy", (object,), {"__getattr__": lambda self, item: ""})()
15-
else:
16-
color_init()
1722

1823

1924
if ".heroku" in os.environ.get("PYTHONHOME", ""):
@@ -162,26 +167,58 @@ def getLogger(name=None) -> ModmailLogger:
162167
return logger
163168

164169

165-
def configure_logging(name, level: Optional[int] = None):
170+
def configure_logging(bot, log_dir: str) -> None:
166171
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)
168190

169-
if level is not None:
170-
log_level = level
191+
logger.info("Log file: %s", bot.log_file_name)
171192

172-
ch.setLevel(log_level)
193+
ch_debug = create_log_handler(bot.log_file_name, rotating=True)
173194

174-
for logger in loggers:
175-
logger.setLevel(log_level)
176-
logger.addHandler(ch_debug)
195+
log_level = level
177196

197+
ch.setLevel(log_level)
178198

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.")
185222

186223

187224
class InvalidConfigError(commands.BadArgument):

0 commit comments

Comments
 (0)