6
6
7
7
from difflib import get_close_matches
8
8
from enum import IntEnum
9
- from logging import FileHandler , StreamHandler
9
+ from logging import FileHandler , StreamHandler , Handler
10
10
from logging .handlers import RotatingFileHandler
11
11
from string import Formatter
12
- from typing import Optional , Union
12
+ from typing import Optional
13
13
14
14
import discord
15
15
from discord .ext import commands
@@ -98,19 +98,19 @@ def create_log_handler(
98
98
level : int = logging .DEBUG ,
99
99
mode : str = "a+" ,
100
100
encoding : str = "utf-8" ,
101
- maxBytes : int = 48000 ,
101
+ maxBytes : int = 28000000 ,
102
102
backupCount : int = 1 ,
103
103
** kwargs ,
104
- ) -> Union [ FileHandler , RotatingFileHandler , StreamHandler ] :
104
+ ) -> Handler :
105
105
"""
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
107
107
pre-defined default values for parameters and formatters to pass to handler class.
108
108
Additional keyword arguments also can be specified, just in case.
109
109
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.
111
111
112
112
Parameters
113
- -----------
113
+ ----------
114
114
filename : Optional[Path]
115
115
Specifies that a `FileHandler` or `RotatingFileHandler` be created, using the specified filename,
116
116
rather than a `StreamHandler`. Defaults to `None`.
@@ -125,11 +125,16 @@ def create_log_handler(
125
125
If this keyword argument is specified along with filename, its value is used when the `FileHandler` is created,
126
126
and thus used when opening the output file. Defaults to 'utf-8'.
127
127
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.
131
131
backupCount : int
132
132
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.
133
138
"""
134
139
if filename is None and rotating :
135
140
raise ValueError ("`filename` must be set to instantiate a `RotatingFileHandler`." )
@@ -153,7 +158,7 @@ def create_log_handler(
153
158
logging .setLoggerClass (ModmailLogger )
154
159
log_level = logging .INFO
155
160
loggers = set ()
156
- ch : StreamHandler = create_log_handler (level = log_level )
161
+ ch = create_log_handler (level = log_level )
157
162
ch_debug : Optional [RotatingFileHandler ] = None
158
163
159
164
@@ -167,8 +172,9 @@ def getLogger(name=None) -> ModmailLogger:
167
172
return logger
168
173
169
174
170
- def configure_logging (bot , log_dir : str ) -> None :
175
+ def configure_logging (bot ) -> None :
171
176
global ch_debug , log_level
177
+
172
178
logger = getLogger (__name__ )
173
179
level_text = bot .config ["log_level" ].upper ()
174
180
logging_levels = {
@@ -184,40 +190,41 @@ def configure_logging(bot, log_dir: str) -> None:
184
190
if level is None :
185
191
level = bot .config .remove ("log_level" )
186
192
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 ]
188
195
else :
189
196
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
-
195
197
log_level = level
196
198
199
+ logger .info ("Log file: %s" , bot .log_file_path )
200
+ ch_debug = create_log_handler (bot .log_file_path , rotating = True )
197
201
ch .setLevel (log_level )
198
202
199
203
for log in loggers :
200
204
log .setLevel (log_level )
201
205
log .addHandler (ch_debug )
202
206
203
207
# 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 ]
205
215
d_logger = logging .getLogger ("discord" )
206
216
d_logger .setLevel (d_level )
207
217
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 )
209
219
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 ))
212
225
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
+
221
228
logger .debug ("Successfully configured logging." )
222
229
223
230
0 commit comments