logger.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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, color=COLORS[levelname], attrs={"bold": True},
  22. )
  23. record.levelname2 = colored("{:<7}".format(record.levelname))
  24. record.message2 = colored(record.msg)
  25. asctime2 = datetime.datetime.fromtimestamp(record.created)
  26. record.asctime2 = termcolor.colored(asctime2, color="green")
  27. record.module2 = termcolor.colored(record.module, color="cyan")
  28. record.funcName2 = termcolor.colored(record.funcName, color="cyan")
  29. record.lineno2 = termcolor.colored(record.lineno, color="cyan")
  30. return logging.Formatter.format(self, record)
  31. class ColoredLogger(logging.Logger):
  32. FORMAT = (
  33. "[%(levelname2)s] %(module2)s:%(funcName2)s:%(lineno2)s - %(message2)s"
  34. )
  35. def __init__(self, name):
  36. logging.Logger.__init__(self, name, logging.INFO)
  37. color_formatter = ColoredFormatter(self.FORMAT)
  38. console = logging.StreamHandler()
  39. console.setFormatter(color_formatter)
  40. self.addHandler(console)
  41. return
  42. logging.setLoggerClass(ColoredLogger)
  43. logger = logging.getLogger(__appname__)