logger.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import logging
  2. from logging.handlers import RotatingFileHandler
  3. class Logger(logging.Logger):
  4. def __init__(self, name):
  5. super().__init__(name)
  6. self.setLevel(level=logging.DEBUG)
  7. self.format_default = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  8. self.console = None
  9. self.handler = None
  10. def screen_on(self, level=logging.DEBUG, format=None):
  11. if self.console:
  12. return None
  13. if format == None:
  14. formatter = logging.Formatter(self.format_default)
  15. else:
  16. formatter = logging.Formatter(format)
  17. self.console = logging.StreamHandler()
  18. self.console.setLevel(level)
  19. self.console.setFormatter(formatter)
  20. self.addHandler(self.console)
  21. def file_on(self, path='log.txt', level=logging.DEBUG, format=None):
  22. if self.handler:
  23. return None
  24. if format == None:
  25. formatter = logging.Formatter(self.format_default)
  26. else:
  27. formatter = logging.Formatter(format)
  28. self.handler = logging.FileHandler(path)
  29. self.handler.setLevel(level)
  30. self.handler.setFormatter(formatter)
  31. self.addHandler(self.handler)
  32. def file_on_with_rotation(self, path='log.txt', level=logging.DEBUG, format=None, maxBytes=8*1024*1024, backupCount=3):
  33. if self.handler:
  34. return None
  35. if format == None:
  36. formatter = logging.Formatter(self.format_default)
  37. else:
  38. formatter = logging.Formatter(format)
  39. self.handler = RotatingFileHandler(
  40. path,
  41. maxBytes=maxBytes,
  42. backupCount=backupCount
  43. )
  44. self.handler.setLevel(level)
  45. self.handler.setFormatter(formatter)
  46. self.addHandler(self.handler)