logconf.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. '''
  2. Created on 6 juil. 2017
  3. @author: olivier.massot
  4. '''
  5. import logging.config
  6. import sys
  7. import traceback
  8. import yaml
  9. from core.constants import DEFAULT_LOG_DIR, LOG_CONFIG_FILE
  10. SYS_EXCEPT_HOOK = sys.excepthook
  11. def start(name="datachecker", level=0, filename=""):
  12. # charge la configuration du logging depuis le fichier 'logging.yaml'
  13. with open(LOG_CONFIG_FILE, 'rt') as f:
  14. conf = yaml.load(f)
  15. if level:
  16. conf["loggers"][name]["level"] = level
  17. if not filename:
  18. filename = DEFAULT_LOG_DIR / r'{}.log'.format(name)
  19. conf["handlers"]["file"]["filename"] = filename
  20. conf["handlers"]["mail"]["fromaddr"] = conf["handlers"]["mail"]["fromaddr"].replace("%name%", name)
  21. conf["handlers"]["mail"]["subject"] = conf["handlers"]["mail"]["subject"].replace("%name%", name)
  22. logging.config.dictConfig(conf)
  23. logger = logging.getLogger(name)
  24. def _excepthook(typ, value, trace):
  25. """ Remplace la gestion d'erreur standard, pour logger aussi les erreurs non gérées """
  26. logger.error("{}\n{}\n{}".format(typ.__name__, value, ''.join(traceback.format_tb(trace))))
  27. SYS_EXCEPT_HOOK(typ, value, trace)
  28. sys.excepthook = _excepthook