Spaces:
Running
Running
File size: 1,681 Bytes
04ffec9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import logging
import colorama
from speakers.common.general import replace_prefix
ROOT_TAG = 'speakers'
class Formatter(logging.Formatter):
def formatMessage(self, record: logging.LogRecord) -> str:
if record.levelno >= logging.ERROR:
self._style._fmt = f'{colorama.Fore.RED}%(levelname)s:{colorama.Fore.RESET} [%(name)s] %(message)s'
elif record.levelno >= logging.WARN:
self._style._fmt = f'{colorama.Fore.YELLOW}%(levelname)s:{colorama.Fore.RESET} [%(name)s] %(message)s'
else:
self._style._fmt = '[%(name)s] %(message)s'
return super().formatMessage(record)
class Filter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
# Try to filter out logs from imported modules
if not record.name.startswith(ROOT_TAG):
return False
# Shorten the name
record.name = replace_prefix(record.name, ROOT_TAG + '.', '')
return super().filter(record)
logging.basicConfig(level=logging.INFO)
root = logging.getLogger(ROOT_TAG)
for h in logging.root.handlers:
h.setFormatter(Formatter())
h.addFilter(Filter())
def set_log_level(level):
root.setLevel(level)
def get_logger(name: str):
return root.getChild(name)
file_handlers = {}
def add_file_logger(path: str):
if path in file_handlers:
return
file_handlers[path] = logging.FileHandler(path, encoding='utf8')
logging.root.addHandler(file_handlers[path])
def remove_file_logger(path: str):
if path in file_handlers:
logging.root.removeHandler(file_handlers[path])
file_handlers[path].close()
del file_handlers[path]
|