''' @author: devone, 02-2020 ''' import logging.config import sys import traceback import yaml from path import Path HERE = Path(__file__).parent LOGDIR = HERE LOGCONF = HERE / 'logging.yml' SYS_EXCEPT_HOOK = sys.excepthook def start(name="main", level=0, filename="", replace=False): # charge la configuration du logging depuis le fichier 'logging.yaml' with open(LOGCONF, 'rt') as f: conf = yaml.load(f, Loader=yaml.FullLoader) if level: conf["loggers"][name]["level"] = level if not filename: filename = LOGDIR / r'{}.log'.format(name) if replace: filename.remove_p() conf["handlers"]["file"]["filename"] = filename logging.config.dictConfig(conf) logger = logging.getLogger(name) def _excepthook(typ, value, trace): """ Remplace la gestion d'erreur standard, pour logger aussi les erreurs non gérées """ logger.error("{}\n{}\n{}".format(typ.__name__, value, ''.join(traceback.format_tb(trace)))) SYS_EXCEPT_HOOK(typ, value, trace) sys.excepthook = _excepthook