Implement overriding log levels for separate modules
This commit is contained in:
parent
3d68a25e13
commit
b6ae96db5a
3 changed files with 53 additions and 0 deletions
9
src/loglevel_overrides.py
Normal file
9
src/loglevel_overrides.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
# This file is for adding rules for selectively enabling debug logging
|
||||
# when working on the code.
|
||||
# Add your rules here and skip this file when committing changes.
|
||||
|
||||
#import re
|
||||
#from util import SelectiveLogger
|
||||
#
|
||||
#SelectiveLogger.addLogLevelRaisingRule("ConnServer")
|
||||
#SelectiveLogger.addLogLevelRaisingRule(re.compile(r'^Site:'))
|
|
@ -4,6 +4,7 @@ import sys
|
|||
import stat
|
||||
import time
|
||||
import logging
|
||||
import loglevel_overrides
|
||||
|
||||
startup_errors = []
|
||||
def startupError(msg):
|
||||
|
|
43
src/util/SelectiveLogger.py
Normal file
43
src/util/SelectiveLogger.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
import logging
|
||||
import re
|
||||
|
||||
log_level_raising_rules = []
|
||||
|
||||
def addLogLevelRaisingRule(rule, level=None):
|
||||
if level is None:
|
||||
level = logging.INFO
|
||||
log_level_raising_rules.append({
|
||||
"rule": rule,
|
||||
"level": level
|
||||
})
|
||||
|
||||
def matchLogLevelRaisingRule(name):
|
||||
for rule in log_level_raising_rules:
|
||||
if isinstance(rule["rule"], re.Pattern):
|
||||
if rule["rule"].search(name):
|
||||
return rule["level"]
|
||||
else:
|
||||
if rule["rule"] == name:
|
||||
return rule["level"]
|
||||
return None
|
||||
|
||||
class SelectiveLogger(logging.getLoggerClass()):
|
||||
def __init__(self, name, level=logging.NOTSET):
|
||||
return super().__init__(name, level)
|
||||
|
||||
def raiseLevel(self, level):
|
||||
raised_level = matchLogLevelRaisingRule(self.name)
|
||||
if raised_level is not None:
|
||||
if level < raised_level:
|
||||
level = raised_level
|
||||
return level
|
||||
|
||||
def isEnabledFor(self, level):
|
||||
level = self.raiseLevel(level)
|
||||
return super().isEnabledFor(level)
|
||||
|
||||
def _log(self, level, msg, args, **kwargs):
|
||||
level = self.raiseLevel(level)
|
||||
return super()._log(level, msg, args, **kwargs)
|
||||
|
||||
logging.setLoggerClass(SelectiveLogger)
|
Loading…
Reference in a new issue