# -*- coding: utf-8 -*- ################################################################################################## import logging import xbmc from utils import window, tryEncode ################################################################################################## def config(): logger = logging.getLogger('PLEX') logger.addHandler(LogHandler()) logger.setLevel(logging.DEBUG) class LogHandler(logging.StreamHandler): def __init__(self): logging.StreamHandler.__init__(self) self.setFormatter(MyFormatter()) def emit(self, record): if self._get_log_level(record.levelno): try: xbmc.log(self.format(record), level=xbmc.LOGNOTICE) except UnicodeEncodeError: xbmc.log(tryEncode(self.format(record)), level=xbmc.LOGNOTICE) @classmethod def _get_log_level(cls, level): levels = { logging.ERROR: 0, logging.WARNING: 0, logging.INFO: 1, logging.DEBUG: 2 } try: log_level = int(window('plex_logLevel')) except ValueError: log_level = 0 return log_level >= levels[level] class MyFormatter(logging.Formatter): def __init__(self, fmt="%(name)s -> %(message)s"): logging.Formatter.__init__(self, fmt) def format(self, record): # Save the original format configured by the user # when the logger formatter was instantiated format_orig = self._fmt # Replace the original format with one customized by logging level if record.levelno in (logging.DEBUG, logging.ERROR): self._fmt = '%(name)s -> %(levelname)s:: %(message)s' # Call the original formatter class to do the grunt work result = logging.Formatter.format(self, record) if window('pms_token'): result = result.replace(window('pms_token'), '') # Restore the original format configured by the user self._fmt = format_orig return result