def log(msg, level=xbmc.LOGNOTICE):
"""
Outputs message to log file
:param msg: message to output
:param level: debug levelxbmc. Values:
xbmc.LOGDEBUG = 0
xbmc.LOGERROR = 4
xbmc.LOGFATAL = 6
xbmc.LOGINFO = 1
xbmc.LOGNONE = 7
xbmc.LOGNOTICE = 2
xbmc.LOGSEVERE = 5
xbmc.LOGWARNING = 3
"""
log_message = u'{0}: {1}'.format(addonID, msg)
xbmc.log(log_message.encode("utf-8"), level)
python类LOGNOTICE的实例源码
def PlayStream(self, url, item, seek, startPlayback=True, package=None):
self.currentURL = url
if startPlayback:
self.play(url, item)
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Playback url ' + str(url), xbmc.LOGNOTICE)
if package is not None:
self.package = package
if seek != '':
self.seek = float(seek)
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Seek ' + str(seek), xbmc.LOGNOTICE)
# self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
# if seek > 0 and seek !='':
# while not self.isPlaying(): #<== The should be while self.isPlaying():
# xbmc.sleep(500)
# xbmc.sleep(2000)
# self.time = float(seek)
# self.seekTime(float(seek))
def log(self, txt = '', level=xbmc.LOGDEBUG):
''' Log a text into the Kodi-Logfile '''
try:
if self.detailLevel > 0 or level == xbmc.LOGERROR:
if self.detailLevel == 2 and level == xbmc.LOGDEBUG:
# More Logging
level = xbmc.LOGNOTICE
elif self.detailLevel == 3 and (level == xbmc.LOGDEBUG or level == xbmc.LOGSEVERE):
# Complex Logging
level = xbmc.LOGNOTICE
if level != xbmc.LOGSEVERE:
if isinstance(txt, unicode):
txt = unidecode(txt)
xbmc.log(b"[%s] %s" % (self.pluginName, txt), level)
except:
xbmc.log(b"[%s] Unicode Error in message text" % self.pluginName, xbmc.LOGERROR)
def emit(self, record):
if record.levelno < logging.WARNING and self._modules and not record.name in self._modules:
# Log INFO and DEBUG only with enabled modules
return
levels = {
logging.CRITICAL: xbmc.LOGFATAL,
logging.ERROR: xbmc.LOGERROR,
logging.WARNING: xbmc.LOGWARNING,
logging.INFO: xbmc.LOGNOTICE,
logging.DEBUG: xbmc.LOGSEVERE,
logging.NOTSET: xbmc.LOGNONE,
}
try:
xbmc.log(self.format(record), levels[record.levelno])
except:
try:
xbmc.log(self.format(record).encode('utf-8', 'ignore'), levels[record.levelno])
except:
xbmc.log(b"[%s] Unicode Error in message text" % self.pluginName, levels[record.levelno])
def onCachesUpdated(self):
#BUG doesn't work on login (maybe always?)
if ADDON.getSetting('notifications.enabled') == 'true':
n = notification.Notification(self.database, ADDON.getAddonInfo('path'))
#n.scheduleNotifications()
if ADDON.getSetting('autoplays.enabled') == 'true':
n = autoplay.Autoplay(self.database, ADDON.getAddonInfo('path'))
#n.scheduleAutoplays()
if ADDON.getSetting('autoplaywiths.enabled') == 'true':
n = autoplaywith.Autoplaywith(self.database, ADDON.getAddonInfo('path'))
#n.scheduleAutoplaywiths()
self.database.close(None)
xbmc.log("[script.tvguide.fullscreen] Background Update Finished", xbmc.LOGNOTICE)
if ADDON.getSetting('background.notify') == 'true':
d = xbmcgui.Dialog()
d.notification("TV Guide Fullscreen", "Finished Updating")
def __getattr__(self, method):
def handler(*args, **kwargs):
args = [str(a).replace(',', '\,') for a in args]
for k, v in kwargs.items():
args.append('{0}={v}'.format(k, str(v).replace(',', '\,')))
if args:
command = '{0}.{1}({2})'.format(self.module, method, ','.join(args))
else:
command = '{0}.{1}'.format(self.module, method)
xbmc.log(command, xbmc.LOGNOTICE)
xbmc.executebuiltin(command)
return handler
def log_exception(modulename, exceptiondetails):
'''helper to properly log exception details'''
log_msg(format_exc(sys.exc_info()), xbmc.LOGNOTICE)
log_msg("ERROR in %s ! --> %s" % (modulename, exceptiondetails), xbmc.LOGERROR)
dialog = xbmcgui.Dialog()
dialog.notification(
"Skin Helper Backup",
"Error while executing, please check your kodi logfile.",
xbmcgui.NOTIFICATION_ERROR)
del dialog
def log(message,loglevel=xbmc.LOGNOTICE):
""""save message to kodi.log.
Args:
message: has to be unicode, http://wiki.xbmc.org/index.php?title=Add-on_unicode_paths#Logging
loglevel: xbmc.LOGDEBUG, xbmc.LOGINFO, xbmc.LOGNOTICE, xbmc.LOGWARNING, xbmc.LOGERROR, xbmc.LOGFATAL
"""
xbmc.log(encode(__addon_id__ + u": " + message), level=loglevel)
def __init__(self):
self.addon = xbmcaddon.Addon(id=ADDON_ID)
self.kodimonitor = xbmc.Monitor()
self.spotty = Spotty()
# spotipy and the webservice are always prestarted in the background
# the auth key for spotipy will be set afterwards
# the webserver is also used for the authentication callbacks from spotify api
self.sp = spotipy.Spotify()
self.connect_player = ConnectPlayer(sp=self.sp, spotty=self.spotty)
self.proxy_runner = ProxyRunner(self.spotty)
self.proxy_runner.start()
webport = self.proxy_runner.get_port()
log_msg('started webproxy at port {0}'.format(webport))
# authenticate
self.token_info = self.get_auth_token()
if self.token_info and not self.kodimonitor.abortRequested():
# initialize spotipy
self.sp._auth = self.token_info["access_token"]
me = self.sp.me()
log_msg("Logged in to Spotify - Username: %s" % me["id"], xbmc.LOGNOTICE)
# start experimental spotify connect daemon
if self.addon.getSetting("connect_player") == "true" and self.spotty.playback_supported:
self.connect_player.start()
# start mainloop
self.main_loop()
def close(self):
'''shutdown, perform cleanup'''
log_msg('Shutdown requested !', xbmc.LOGNOTICE)
kill_spotty()
self.proxy_runner.stop()
self.connect_player.close()
del self.connect_player
del self.addon
del self.kodimonitor
log_msg('stopped', xbmc.LOGNOTICE)
def switch_user(self):
'''called whenever we switch to a different user/credentials'''
log_msg("login credentials changed")
if self.renew_token():
xbmc.executebuiltin("Container.Refresh")
me = self.sp.me()
log_msg("Logged in to Spotify - Username: %s" % me["id"], xbmc.LOGNOTICE)
# restart daemon
if self.connect_player.daemon_active:
self.connect_player.stop_thread()
audio_device = self.addon.getSetting("audio_device") == "true"
self.connect_player = ConnectPlayer(sp=self.sp, audio_device=audio_device, spotty=self.spotty)
self.connect_player.start()
def log_msg(msg, loglevel=xbmc.LOGDEBUG):
'''log message to kodi log'''
if isinstance(msg, unicode):
msg = msg.encode('utf-8')
if DEBUG and loglevel == xbmc.LOGDEBUG:
loglevel = xbmc.LOGNOTICE
xbmc.log("%s --> %s" % (ADDON_ID, msg), level=loglevel)
def playNext(self, service, package):
(mediaURLs, package) = service.getPlaybackCall(package)
options = []
mediaURLs = sorted(mediaURLs)
for mediaURL in mediaURLs:
options.append(mediaURL.qualityDesc)
if mediaURL.qualityDesc == 'original':
originalURL = mediaURL.url
playbackURL = ''
playbackQuality = ''
if service.settings.promptQuality:
if len(options) > 1:
ret = xbmcgui.Dialog().select(service.addon.getLocalizedString(30033), options)
else:
ret = 0
else:
ret = 0
playbackURL = mediaURLs[ret].url
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Play next ' + str(playbackURL), xbmc.LOGNOTICE)
playbackQuality = mediaURLs[ret].quality
item = xbmcgui.ListItem(package.file.displayTitle(), iconImage=package.file.thumbnail,
thumbnailImage=package.file.thumbnail, path=playbackURL+'|' + service.getHeadersEncoded())
item.setInfo( type="Video", infoLabels={ "Title": package.file.title } )
self.PlayStream(playbackURL+'|' + service.getHeadersEncoded(),item,0,package)
def playList(self, service):
while self.current < len(self.mediaItems) and not self.isExit:
self.playNext(service, self.mediaItems[self.current])
current = self.current
while current == self.current and not self.isExit:
xbmc.sleep(3000)
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Exit play list', xbmc.LOGNOTICE)
# def onPlayBackSeek(self,offset):
def seekTo(self, seek):
if seek != '':
self.seek = float(seek)
# self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
if seek > 0 and seek !='':
while not self.isPlaying(): #<== The should be while self.isPlaying():
xbmc.sleep(500)
xbmc.sleep(2000)
self.time = float(seek)
self.seekTime(float(seek))
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Seek ' + str(self.time), xbmc.LOGNOTICE)
def log_notice(self, message):
"""
Add NOTICE message to the Kodi log
:param message: message to write to the Kodi log
:type message: str
"""
self.log(message, xbmc.LOGNOTICE)
def log(self, msg, level=xbmc.LOGNOTICE):
"""
Logs a message to the Kodi log (default debug)
:param msg: Message to be logged
:type msg: mixed
:param level: Log level
:type level: int
"""
addon_data = self.get_addon_data()
xbmc.log('[' + addon_data.get('plugin') + '] ' + str(msg), level)
def info(self, message):
message = prep_log_message(message)
if xbmc:
self._log(message, xbmc.LOGNOTICE)
else:
self._log.info(message)
def log(message):
if application_log_enabled:
xbmc.log(message, xbmc.LOGNOTICE)
# Write this module messages on XBMC log
def _log(message):
if module_log_enabled:
xbmc.log("plugintools."+message, xbmc.LOGNOTICE)
# Parse XBMC params - based on script.module.parsedom addon
def info(texto=""):
if loggeractive:
xbmc.log(get_caller(encode_log(texto)), xbmc.LOGNOTICE)
def debug(texto=""):
if loggeractive:
texto = " [" + get_caller() + "] " + encode_log(texto)
xbmc.log("######## DEBUG #########", xbmc.LOGNOTICE)
xbmc.log(texto, xbmc.LOGNOTICE)
def error(texto=""):
if loggeractive:
texto = " [" + get_caller() + "] " + encode_log(texto)
xbmc.log("######## ERROR #########", xbmc.LOGNOTICE)
xbmc.log(texto, xbmc.LOGNOTICE)
def log(msg):
pass
# if is_standalone:
# print msg
# else:
# import threading
# xbmc.log("%s - %s" % (threading.currentThread(), msg),level=xbmc.LOGNOTICE)
def log(msg):
pass
# if is_standalone:
# print msg
# else:
# import threading
# xbmc.log("%s - %s" % (threading.currentThread(), msg), level=xbmc.LOGNOTICE)
def log(msg):
xbmc.log(msg, level=xbmc.LOGNOTICE)
def log(msg):
# pass
xbmc.log(msg, level=xbmc.LOGNOTICE)
def __init__(self, pluginName, detailLevel=0, enableTidalApiLog=False):
''' Initialize Error Logging with a given Log Level
detailLevel = 0 : xbmc.LOGERROR and xbmc.LOGNOTICE
detailLevel = 1 : as level 0 plus xbmc.LOGWARNING
detailLevel = 2 : as level 1 plus xbmc.LOGDEBUG
detailLevel = 3 : as level 2 plus xbmc.LOGSEVERE
'''
self.pluginName = pluginName
self.detailLevel = detailLevel
self.debugServer = 'localhost'
# Set Log Handler for tidalapi
self.addTidalapiLogger(pluginName, enableDebug=enableTidalApiLog)
def log(msg, level=xbmc.LOGNOTICE):
#return
level = xbmc.LOGNOTICE
print('[SPECTO]: %s' % (msg))
try:
if isinstance(msg, unicode):
msg = msg.encode('utf-8')
xbmc.log('[SPECTO]: %s' % (msg), level)
except Exception as e:
try:
#xbmc.log('Logging Failure: %s' % (e), level)
a=1
except: pass # just give up
def onInit(self, success):
if success:
xbmc.log("[script.tvguide.fullscreen] Background Update Starting...", xbmc.LOGNOTICE)
self.database.updateChannelAndProgramListCaches(self.onCachesUpdated)
else:
self.database.close()