logging_.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import traceback
  2. import logging.config
  3. import sys
  4. from path import Path
  5. import yaml
  6. from core.constants import LOG_DIR, LOGGER_NAME, LOGGER_LEVEL
  7. SYS_EXCEPT_HOOK = sys.excepthook
  8. class Logger:
  9. _current = None
  10. @staticmethod
  11. def get():
  12. if Logger._current is None:
  13. configfile = Path(__file__).parent
  14. with open(configfile / 'logging.yaml', 'rt') as f:
  15. conf = yaml.load(f, Loader=yaml.FullLoader)
  16. conf["loggers"][LOGGER_NAME]["level"] = LOGGER_LEVEL
  17. filename = LOG_DIR / f'{LOGGER_NAME}.log'
  18. conf["handlers"]["file"]["filename"] = filename
  19. logging.config.dictConfig(conf)
  20. logger = logging.getLogger(LOGGER_NAME)
  21. # Configure how errors are processed
  22. sys_err = sys.excepthook
  23. def err_handler(typ, value, trace):
  24. logger.error("{}\n{}\n{}".format(typ.__name__, value, ''.join(traceback.format_tb(trace))))
  25. sys_err(typ, value, trace)
  26. sys.excepthook = err_handler
  27. Logger._current = logger
  28. return Logger._current