| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- '''
-
- Set up the logging
- @author: olivier.massot, 2018
- '''
- import logging.config
- import sys
- import traceback
- import yaml
- from core.constants import LOGDIR, LOGCONF
- from qgis.core import QgsMessageLog
- _to_qgis_level = {logging.DEBUG: 0,
- logging.INFO: 0,
- logging.WARNING: 1,
- logging.ERROR: 2,
- logging.CRITICAL: 2,
- logging.NOTSET: 4}
-
- class QgsLogHandler(logging.Handler):
-
- _qgs_iface = None
- @classmethod
- def connect_to_iface(cls, iface):
- cls._qgs_iface = iface
- def emit(self, record):
- try:
- msg = self.format(record)
- level = record.levelno
-
- QgsMessageLog.logMessage(msg, "MnCheck", _to_qgis_level[level])
-
- if self._qgs_iface and record.levelno >= logging.WARNING:
- self._qgs_iface.messageBar().pushMessage("MnCheck", msg, level=_to_qgis_level[level])
-
- except (KeyboardInterrupt, SystemExit):
- raise
- except:
- self.handleError(record)
- def write(self, msg):
- QgsMessageLog.logMessage(msg, "MnCheck", 0)
- SYS_EXCEPT_HOOK = sys.excepthook
- def start(name="main", level=0, filename=""):
- # charge la configuration du logging depuis le fichier 'logging.yaml'
- with open(LOGCONF, 'rt') as f:
- conf = yaml.load(f)
- if level:
- conf["loggers"][name]["level"] = level
- if not filename:
- filename = LOGDIR / r'{}.log'.format(name)
- 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
|