Skip to content

Commit 3e37cc6

Browse files
committed
Update logging configurations
1 parent 767ddc7 commit 3e37cc6

File tree

3 files changed

+45
-50
lines changed

3 files changed

+45
-50
lines changed

bot.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,11 @@ def __init__(self):
8383

8484
self.threads = ThreadManager(self)
8585

86-
self.log_file_name = os.path.join(temp_dir, f"{self.token.split('.')[0]}.log")
87-
configure_logging(self, temp_dir)
86+
log_dir = os.path.join(temp_dir, "logs")
87+
if not os.path.exists(log_dir):
88+
os.mkdir(log_dir)
89+
self.log_file_path = os.path.join(log_dir, "modmail.log")
90+
configure_logging(self)
8891

8992
self.plugin_db = PluginDatabaseClient(self) # Deprecated
9093
self.startup()

cogs/utility.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -401,13 +401,7 @@ async def sponsors(self, ctx):
401401
async def debug(self, ctx):
402402
"""Shows the recent application logs of the bot."""
403403

404-
log_file_name = self.bot.token.split(".")[0]
405-
406-
with open(
407-
os.path.join(os.path.dirname(os.path.abspath(__file__)), f"../temp/{log_file_name}.log"),
408-
"r+",
409-
encoding="utf-8",
410-
) as f:
404+
with open(self.bot.log_file_path, "r+", encoding="utf-8") as f:
411405
logs = f.read().strip()
412406

413407
if not logs:
@@ -455,12 +449,8 @@ async def debug_hastebin(self, ctx):
455449
"""Posts application-logs to Hastebin."""
456450

457451
haste_url = os.environ.get("HASTE_URL", "https://hastebin.cc")
458-
log_file_name = self.bot.token.split(".")[0]
459452

460-
with open(
461-
os.path.join(os.path.dirname(os.path.abspath(__file__)), f"../temp/{log_file_name}.log"),
462-
"rb+",
463-
) as f:
453+
with open(self.bot.log_file_path, "rb+") as f:
464454
logs = BytesIO(f.read().strip())
465455

466456
try:
@@ -491,12 +481,7 @@ async def debug_hastebin(self, ctx):
491481
async def debug_clear(self, ctx):
492482
"""Clears the locally cached logs."""
493483

494-
log_file_name = self.bot.token.split(".")[0]
495-
496-
with open(
497-
os.path.join(os.path.dirname(os.path.abspath(__file__)), f"../temp/{log_file_name}.log"),
498-
"w",
499-
):
484+
with open(self.bot.log_file_path, "w"):
500485
pass
501486
await ctx.send(
502487
embed=discord.Embed(color=self.bot.main_color, description="Cached logs are now cleared.")

core/models.py

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
from difflib import get_close_matches
88
from enum import IntEnum
9-
from logging import FileHandler, StreamHandler
9+
from logging import FileHandler, StreamHandler, Handler
1010
from logging.handlers import RotatingFileHandler
1111
from string import Formatter
12-
from typing import Optional, Union
12+
from typing import Optional
1313

1414
import discord
1515
from discord.ext import commands
@@ -98,19 +98,19 @@ def create_log_handler(
9898
level: int = logging.DEBUG,
9999
mode: str = "a+",
100100
encoding: str = "utf-8",
101-
maxBytes: int = 48000,
101+
maxBytes: int = 28000000,
102102
backupCount: int = 1,
103103
**kwargs,
104-
) -> Union[FileHandler, RotatingFileHandler, StreamHandler]:
104+
) -> Handler:
105105
"""
106-
Return a pre-configured log handler. This function is made for consistency sake with
106+
Creates a pre-configured log handler. This function is made for consistency's sake with
107107
pre-defined default values for parameters and formatters to pass to handler class.
108108
Additional keyword arguments also can be specified, just in case.
109109
110-
Plugin developers should not use this and only use the `getLogger` instead to instantiate the ModmailLogger object.
110+
Plugin developers should not use this and use `models.getLogger` instead.
111111
112112
Parameters
113-
-----------
113+
----------
114114
filename : Optional[Path]
115115
Specifies that a `FileHandler` or `RotatingFileHandler` be created, using the specified filename,
116116
rather than a `StreamHandler`. Defaults to `None`.
@@ -125,11 +125,16 @@ def create_log_handler(
125125
If this keyword argument is specified along with filename, its value is used when the `FileHandler` is created,
126126
and thus used when opening the output file. Defaults to 'utf-8'.
127127
maxBytes : int
128-
The max file size before the rollover occurs. Defaults to 48000. Rollover occurs whenever the current log file
129-
is nearly `maxBytes` in length; but if either of `maxBytes` or `backupCount` is zero, rollover never occurs, so you
130-
generally want to set `backupCount` to at least 1.
128+
The max file size before the rollover occurs. Defaults to 28000000 (28MB). Rollover occurs whenever the current
129+
log file is nearly `maxBytes` in length; but if either of `maxBytes` or `backupCount` is zero,
130+
rollover never occurs, so you generally want to set `backupCount` to at least 1.
131131
backupCount : int
132132
Max number of backup files. Defaults to 1. If this is set to zero, rollover will never occur.
133+
134+
Returns
135+
-------
136+
`StreamHandler` when `filename` is `None`, otherwise `FileHandler` or `RotatingFileHandler`
137+
depending on the `rotating` value.
133138
"""
134139
if filename is None and rotating:
135140
raise ValueError("`filename` must be set to instantiate a `RotatingFileHandler`.")
@@ -153,7 +158,7 @@ def create_log_handler(
153158
logging.setLoggerClass(ModmailLogger)
154159
log_level = logging.INFO
155160
loggers = set()
156-
ch: StreamHandler = create_log_handler(level=log_level)
161+
ch = create_log_handler(level=log_level)
157162
ch_debug: Optional[RotatingFileHandler] = None
158163

159164

@@ -167,8 +172,9 @@ def getLogger(name=None) -> ModmailLogger:
167172
return logger
168173

169174

170-
def configure_logging(bot, log_dir: str) -> None:
175+
def configure_logging(bot) -> None:
171176
global ch_debug, log_level
177+
172178
logger = getLogger(__name__)
173179
level_text = bot.config["log_level"].upper()
174180
logging_levels = {
@@ -184,40 +190,41 @@ def configure_logging(bot, log_dir: str) -> None:
184190
if level is None:
185191
level = bot.config.remove("log_level")
186192
logger.warning("Invalid logging level set: %s.", level_text)
187-
logger.warning("Using default logging level: INFO.")
193+
logger.warning("Using default logging level: %s.", level)
194+
level = logging_levels[level]
188195
else:
189196
logger.info("Logging level: %s", level_text)
190-
191-
logger.info("Log file: %s", bot.log_file_name)
192-
193-
ch_debug = create_log_handler(bot.log_file_name, rotating=True)
194-
195197
log_level = level
196198

199+
logger.info("Log file: %s", bot.log_file_path)
200+
ch_debug = create_log_handler(bot.log_file_path, rotating=True)
197201
ch.setLevel(log_level)
198202

199203
for log in loggers:
200204
log.setLevel(log_level)
201205
log.addHandler(ch_debug)
202206

203207
# Set up discord.py logging
204-
d_level = logging_levels.get(bot.config["discord_log_level"].upper(), logging.INFO)
208+
d_level_text = bot.config["discord_log_level"].upper()
209+
d_level = logging_levels.get(d_level_text)
210+
if d_level is None:
211+
d_level = bot.config.remove("discord_log_level")
212+
logger.warning("Invalid discord logging level set: %s.", d_level_text)
213+
logger.warning("Using default discord logging level: %s.", d_level)
214+
d_level = logging_levels[d_level]
205215
d_logger = logging.getLogger("discord")
206216
d_logger.setLevel(d_level)
207217

208-
non_verbose_log_level = d_level if d_level != logging.DEBUG else logging.INFO
218+
non_verbose_log_level = max(d_level, logging.INFO)
209219
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))
220+
if non_verbose_log_level != d_level:
221+
logger.info("Discord logging level (stdout): %s.", logging.getLevelName(non_verbose_log_level))
222+
logger.info("Discord logging level (logfile): %s.", logging.getLevelName(d_level))
223+
else:
224+
logger.info("Discord logging level: %s.", logging.getLevelName(d_level))
212225
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)
226+
d_logger.addHandler(ch_debug)
227+
221228
logger.debug("Successfully configured logging.")
222229

223230

0 commit comments

Comments
 (0)