logger.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import datetime
  2. import logging
  3. import termcolor
  4. from . import __appname__
  5. COLORS = {
  6. 'WARNING': 'yellow',
  7. 'INFO': 'white',
  8. 'DEBUG': 'blue',
  9. 'CRITICAL': 'red',
  10. 'ERROR': 'red',
  11. }
  12. class ColoredFormatter(logging.Formatter):
  13. def __init__(self, fmt, use_color=True):
  14. logging.Formatter.__init__(self, fmt)
  15. self.use_color = use_color
  16. def format(self, record):
  17. levelname = record.levelname
  18. if self.use_color and levelname in COLORS:
  19. def colored(text):
  20. return termcolor.colored(
  21. text,
  22. color=COLORS[levelname],
  23. attrs={'bold': True},
  24. )
  25. record.levelname2 = colored('{:<8}'.format(record.levelname))
  26. record.message2 = colored(record.msg)
  27. asctime2 = datetime.datetime.fromtimestamp(record.created)
  28. record.asctime2 = termcolor.colored(asctime2, color='green')
  29. record.module2 = termcolor.colored(record.module, color='cyan')
  30. record.funcName2 = termcolor.colored(record.funcName, color='cyan')
  31. record.lineno2 = termcolor.colored(record.lineno, color='cyan')
  32. return logging.Formatter.format(self, record)
  33. class ColoredLogger(logging.Logger):
  34. FORMAT = (
  35. '%(asctime2)s | %(levelname2)s | '
  36. '%(module2)s:%(funcName2)s:%(lineno2)s - %(message2)s'
  37. )
  38. def __init__(self, name):
  39. logging.Logger.__init__(self, name, logging.INFO)
  40. color_formatter = ColoredFormatter(self.FORMAT)
  41. console = logging.StreamHandler()
  42. console.setFormatter(color_formatter)
  43. self.addHandler(console)
  44. return
  45. logging.setLoggerClass(ColoredLogger)
  46. logger = logging.getLogger(__appname__)