logger.py 1.8 KB

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