plugin.video.viervijfzes/resources/lib/kodilogging.py
2020-10-26 17:25:37 +01:00

59 lines
1.8 KiB
Python

# -*- coding: utf-8 -*-
"""Log handler for Kodi"""
from __future__ import absolute_import, division, unicode_literals
import logging
import xbmc
import xbmcaddon
from resources.lib import kodiutils
ADDON = xbmcaddon.Addon()
class KodiLogHandler(logging.StreamHandler):
""" A log handler for Kodi """
def __init__(self):
logging.StreamHandler.__init__(self)
formatter = logging.Formatter("[{}] [%(name)s] %(message)s".format(ADDON.getAddonInfo("id")))
self.setFormatter(formatter)
# xbmc.LOGNOTICE is deprecated in Kodi 19 Matrix
if kodiutils.kodi_version_major() > 18:
self.info_level = xbmc.LOGINFO
else:
self.info_level = xbmc.LOGNOTICE
def emit(self, record):
""" Emit a log message """
levels = {
logging.CRITICAL: xbmc.LOGFATAL,
logging.ERROR: xbmc.LOGERROR,
logging.WARNING: xbmc.LOGWARNING,
logging.INFO: self.info_level,
logging.DEBUG: xbmc.LOGDEBUG,
logging.NOTSET: xbmc.LOGNONE,
}
# Map DEBUG level to info_level if debug logging setting has been activated
# This is for troubleshooting only
if ADDON.getSetting('debug_logging') == 'true':
levels[logging.DEBUG] = self.info_level
try:
xbmc.log(self.format(record), levels[record.levelno])
except UnicodeEncodeError:
xbmc.log(self.format(record).encode('utf-8', 'ignore'), levels[record.levelno])
def flush(self):
""" Flush the messages """
def config():
""" Setup the logger with this handler """
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # Make sure we pass all messages, Kodi will do some filtering itself.
logger.addHandler(KodiLogHandler())