logger.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import logging
  2. import termcolor
  3. from . import __appname__
  4. COLORS = {
  5. 'WARNING': 'yellow',
  6. 'INFO': 'white',
  7. 'DEBUG': 'blue',
  8. 'CRITICAL': 'red',
  9. 'ERROR': 'red',
  10. }
  11. class ColoredFormatter(logging.Formatter):
  12. def __init__(self, msg, use_color=True):
  13. logging.Formatter.__init__(self, msg)
  14. self.use_color = use_color
  15. def format(self, record):
  16. levelname = record.levelname
  17. if self.use_color and levelname in COLORS:
  18. colored_levelname = termcolor.colored(
  19. '[{}]'.format(levelname), color=COLORS[levelname]
  20. )
  21. record.levelname = colored_levelname
  22. return logging.Formatter.format(self, record)
  23. class ColoredLogger(logging.Logger):
  24. fmt_filename = termcolor.colored('%(filename)s', attrs={'bold': True})
  25. FORMAT = '%(levelname)s %(message)s ({}:%(lineno)d)'.format(fmt_filename)
  26. def __init__(self, name):
  27. logging.Logger.__init__(self, name, logging.INFO)
  28. color_formatter = ColoredFormatter(self.FORMAT)
  29. console = logging.StreamHandler()
  30. console.setFormatter(color_formatter)
  31. self.addHandler(console)
  32. return
  33. logging.setLoggerClass(ColoredLogger)
  34. logger = logging.getLogger(__appname__)