14
14
from logging import ERROR
15
15
from logging import INFO
16
16
from logging import WARNING
17
- from logging import FileHandler
18
17
from logging import Formatter
19
18
from logging import addLevelName
20
19
from logging import getLogger
20
+ from logging .handlers import TimedRotatingFileHandler
21
21
22
22
# Source.Python Imports
23
23
# Core
@@ -258,6 +258,12 @@ def _log(self, level, msg, *args, **kwargs):
258
258
# Print to the main SP log file?
259
259
if SP_LOG & areas :
260
260
261
+ # Get the given extra dictionary
262
+ extra = kwargs .setdefault ('extra' , dict ())
263
+
264
+ # Set the logger name
265
+ extra .setdefault ('logger_name' , self .logger .name )
266
+
261
267
# Print to the SP log file
262
268
_sp_logger .logger .log (level , msg , * args , ** kwargs )
263
269
@@ -374,7 +380,8 @@ def __init__(
374
380
log_path .parent .makedirs ()
375
381
376
382
# Create the handler an add it to the logger
377
- self ._handler = FileHandler (log_path , encoding = encoding )
383
+ self ._handler = DailyRotatingFileHandler (log_path , when = 'D' ,
384
+ encoding = encoding )
378
385
self ._handler .setFormatter (self .formatter )
379
386
self .logger .addHandler (self ._handler )
380
387
@@ -404,6 +411,30 @@ def _unload_instance(self):
404
411
handler .close ()
405
412
406
413
414
+ class DailyRotatingFileHandler (TimedRotatingFileHandler ):
415
+ """Source.Python's logging file handler."""
416
+
417
+ file_name_format = 'source-python.%Y-%m-%d.log'
418
+
419
+ def rotation_filename (self , default_name ):
420
+ """Returns the name of today's log file."""
421
+ return date .today ().strftime (self .file_name_format )
422
+
423
+ def getFilesToDelete (self ):
424
+ """Returns the files to delete."""
425
+ files = list ()
426
+ for f in Path (self ).parent .files ():
427
+ try :
428
+ delta = date .today () - datetime .strptime (
429
+ f .name , self .file_name_format ).date ()
430
+ if delta .days < self .backupCount :
431
+ continue
432
+ files .append (f )
433
+ except ValueError :
434
+ continue
435
+ return files
436
+
437
+
407
438
# Set the core ConVars
408
439
_level = ConVar (
409
440
'sp_logging_level' , '0' , 'The Source.Python base logging level' )
@@ -414,7 +445,7 @@ def _unload_instance(self):
414
445
_sp_logger = LogManager (
415
446
'sp' , _level , _areas ,
416
447
'source-python.{0}' .format (date .today ().strftime ('%Y-%m-%d' )),
417
- '%(asctime)s - %(name )s\t -\t %(levelname)s\t %(message)s' ,
448
+ '%(asctime)s - %(logger_name )s\t -\t %(levelname)s\t %(message)s' ,
418
449
'%Y-%m-%d %H:%M:%S' )
419
450
420
451
# Set the parent logger level to allow all message types
0 commit comments