forked from axiom-team/astrXbian
100 lines
2.9 KiB
Python
100 lines
2.9 KiB
Python
'''
|
|
xbmcswift2.log
|
|
--------------
|
|
|
|
This module contains the xbmcswift2 logger as well as a convenience
|
|
method for creating new loggers.
|
|
|
|
:copyright: (c) 2012 by Jonathan Beluch
|
|
:license: GPLv3, see LICENSE for more details.
|
|
'''
|
|
import logging
|
|
from xbmcswift2 import CLI_MODE
|
|
|
|
|
|
# TODO: Add logging to a file as well when on CLI with lowest threshold
|
|
# possible
|
|
#fh = logging.FileHandler('log_filename.txt')
|
|
#fh.setLevel(logging.DEBUG)
|
|
#fh.setFormatter(formatter)
|
|
#log.addHandler(fh)
|
|
# TODO: Allow a global flag to set logging level when dealing with XBMC
|
|
# TODO: Add -q and -v flags to CLI to quiet or enabel more verbose logging
|
|
|
|
|
|
class XBMCFilter(object):
|
|
'''A logging filter that streams to STDOUT or to the xbmc log if
|
|
running inside XBMC.
|
|
'''
|
|
python_to_xbmc = {
|
|
'DEBUG': 'LOGDEBUG',
|
|
'INFO': 'LOGNOTICE',
|
|
'WARNING': 'LOGWARNING',
|
|
'ERROR': 'LOGERROR',
|
|
'CRITICAL': 'LOGSEVERE',
|
|
}
|
|
|
|
xbmc_levels = {
|
|
'LOGDEBUG': 0,
|
|
'LOGINFO': 1,
|
|
'LOGNOTICE': 2,
|
|
'LOGWARNING': 3,
|
|
'LOGERROR': 4,
|
|
'LOGSEVERE': 5,
|
|
'LOGFATAL': 6,
|
|
'LOGNONE': 7,
|
|
}
|
|
|
|
def __init__(self, prefix):
|
|
self.prefix = prefix
|
|
|
|
def filter(self, record):
|
|
'''Returns True for all records if running in the CLI, else returns
|
|
True.
|
|
|
|
When running inside KODI it calls the xbmc.log() method and prevents
|
|
the message from being double printed to STDOUT.
|
|
'''
|
|
|
|
# When running in KODI, any logged statements will be double printed
|
|
# since we are calling xbmc.log() explicitly. Therefore we return False
|
|
# so every log message is filtered out and not printed again.
|
|
if CLI_MODE:
|
|
return True
|
|
else:
|
|
# Must not be imported until here because of import order issues
|
|
# when running in CLI
|
|
from xbmcswift2 import xbmc
|
|
xbmc_level = XBMCFilter.xbmc_levels.get(
|
|
XBMCFilter.python_to_xbmc.get(record.levelname))
|
|
xbmc.log('%s%s' % (self.prefix, record.getMessage()), xbmc_level)
|
|
return False
|
|
|
|
|
|
if CLI_MODE:
|
|
GLOBAL_LOG_LEVEL = logging.INFO
|
|
else:
|
|
GLOBAL_LOG_LEVEL = logging.DEBUG
|
|
|
|
|
|
def setup_log(name):
|
|
'''Returns a logging instance for the provided name. The returned
|
|
object is an instance of logging.Logger. Logged messages will be
|
|
printed to stderr when running in the CLI, or forwarded to KODI's
|
|
log when running in KODI mode.
|
|
'''
|
|
_log = logging.getLogger(name)
|
|
_log.setLevel(GLOBAL_LOG_LEVEL)
|
|
handler = logging.StreamHandler()
|
|
formatter = logging.Formatter(
|
|
'%(asctime)s - %(levelname)s - [%(name)s] %(message)s')
|
|
handler.setFormatter(formatter)
|
|
_log.addHandler(handler)
|
|
_log.addFilter(XBMCFilter('[%s] ' % name))
|
|
return _log
|
|
|
|
|
|
# The xbmcswift2 log
|
|
# Plugin writers should use plugin.log instead.
|
|
log = setup_log('xbmcswift2')
|