switch to use python's logging, with config file i'm not entirely happy about

This commit is contained in:
Brian S. Stephan 2012-07-15 21:32:12 -05:00
parent 4100b55de0
commit 9654f4de98
13 changed files with 116 additions and 77 deletions

View File

@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import bisect
import copy
from ConfigParser import NoOptionError, NoSectionError
import logging
import re
import signal
from SimpleXMLRPCServer import SimpleXMLRPCServer
@ -37,6 +38,7 @@ class DrBotzoMethods:
"""Store the same stuff the core module would, since we'll probably need it."""
self.irc = irc
self.log = logging.getLogger('dr.botzo')
def echo(self, message):
"""
@ -95,6 +97,7 @@ class DrBotServerConnection(irclib.ServerConnection):
# temporary. hopefully on_welcome() will set this
self.nickmask = socket.getfqdn()
self.log = logging.getLogger('dr.botzo')
self.add_global_handler('welcome', self.on_welcome, 1)
@ -149,6 +152,7 @@ class DrBotIRC(irclib.IRC):
self.config = config
self.xmlrpc = None
self.log = logging.getLogger('dr.botzo')
# handle SIGINT
signal.signal(signal.SIGINT, self.sigint_handler)
@ -187,7 +191,7 @@ class DrBotIRC(irclib.IRC):
if self.config.has_section('Ignore'):
alias = self.config.get('Ignore', nick.lower())
if alias:
print("ignoring " + nick + " as per config file")
self.log.debug("ignoring " + nick + " as per config file")
return
except NoOptionError: pass
@ -202,8 +206,9 @@ class DrBotIRC(irclib.IRC):
return
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
print("exception floated up to DrBotIrc!")
traceback.print_exception(exc_type, exc_value, exc_traceback)
self.log.error("exception floated up to DrBotIrc!")
self.log.error(exc_type + ": " + exc_value)
self.log.error(exc_traceback)
def xmlrpc_register_function(self, func, name):
"""Add a method to the XML-RPC interface."""
@ -383,7 +388,7 @@ class DrBotIRC(irclib.IRC):
module.shutdown()
connection.quit(msg)
print(self.save_config())
self.log.info(self.save_config())
self._xmlrpc_shutdown()
sys.exit()
@ -493,7 +498,7 @@ class DrBotIRC(irclib.IRC):
module.save()
module.shutdown()
print(self.save_config())
self.log.info(self.save_config())
self._xmlrpc_shutdown()
sys.exit()

View File

@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from ConfigParser import NoSectionError, NoOptionError
import inspect
import logging
import re
import sys
import sqlite3
@ -40,6 +41,7 @@ class Module(object):
self.irc = irc
self.config = config
self.server = server
self.log = logging.getLogger('dr.botzo')
self.is_shutdown = False
@ -47,7 +49,7 @@ class Module(object):
self.db_init()
# print what was loaded, for debugging
print("loaded " + self.__class__.__name__)
self.log.debug("loaded " + self.__class__.__name__)
def register_handlers(self):
"""Hook handler functions into the IRC library. This is called when the
@ -203,7 +205,7 @@ class Module(object):
conn.close()
except sqlite3.Error as e:
conn.close()
print("sqlite error:" + str(e))
self.log.error("sqlite error:" + str(e))
return version
@ -218,7 +220,7 @@ class Module(object):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def db_init(self):
@ -234,7 +236,7 @@ class Module(object):
events.
"""
print("looks like someone forgot to implement do!")
self.log.error("looks like someone forgot to implement do!")
def help_description(self):
"""Return a quick list of commands or other summary, should be

View File

@ -17,6 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from ConfigParser import ConfigParser, NoSectionError, NoOptionError
import logging
import logging.config
import os
import re
import sys
@ -56,6 +58,9 @@ except NoOptionError as e:
# load additional options
irclib.DEBUG = config.getboolean('dr.botzo', 'debug')
logging.config.fileConfig('logging.cfg')
log = logging.getLogger('dr.botzo')
try:
# make sure we can initialize the database, if such a thing is
# called for in the config file
@ -96,9 +101,9 @@ try:
for mod in mods:
irc.load_module(mod)
except NoSectionError as e:
print("You seem to be missing a modules config section, which you probably wanted.")
log.error("You seem to be missing a modules config section, which you probably wanted.")
except NoOptionError as e:
print("You seem to be missing a modlist config option, which you probably wanted.")
log.error("You seem to be missing a modlist config option, which you probably wanted.")
# loop forever
irc.process_forever()

27
logging.cfg Normal file
View File

@ -0,0 +1,27 @@
[loggers]
keys = root,dr.botzo
[handlers]
keys = dr.botzo
[formatters]
keys = dr.botzo
[logger_root]
level = DEBUG
handlers = dr.botzo
[logger_dr.botzo]
level = DEBUG
handlers = dr.botzo
propagate = 1
qualname = drbotzo
[handler_dr.botzo]
class = StreamHandler
level = DEBUG
args = (sys.stdout,)
[formatter_dr.botzo]
format = %(asctime)s %(levelname)s %(message)s
datefmt =

View File

@ -113,7 +113,7 @@ class Achievements(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if (version < 2):
db = self.get_db()
@ -129,7 +129,7 @@ class Achievements(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if (version < 3):
db = self.get_db()
@ -154,7 +154,7 @@ class Achievements(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def register_handlers(self):
@ -202,7 +202,7 @@ class Achievements(Module):
if event.source().find('!') >= 0:
nick = irclib.nm_to_n(event.source())
userhost = irclib.nm_to_uh(event.source())
print('good: ' + nick + ' ' + userhost + ' ' + event.eventtype() + ' ' + str(event.target()))
self.log.debug('good: ' + nick + ' ' + userhost + ' ' + event.eventtype() + ' ' + str(event.target()))
if event.arguments():
msg = event.arguments()[0]
msg_len = len(event.arguments()[0])
@ -213,9 +213,9 @@ class Achievements(Module):
player_id = self._get_or_add_player(nick, userhost)
self._add_event(player_id, event.eventtype(), event.target(), msg, msg_len)
else:
print('bad: ' + event.source() + ' ' + event.eventtype())
self.log.debug('bad: ' + event.source() + ' ' + event.eventtype())
else:
print('really bad: ' + event.eventtype())
self.log.debug('really bad: ' + event.eventtype())
def do(self, connection, event, nick, userhost, what, admin_unlocked):
"""Do stuff when commanded."""
@ -265,7 +265,7 @@ class Achievements(Module):
return result['id']
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _add_event(self, player_id, event, target, msg, msg_len):
@ -303,7 +303,7 @@ class Achievements(Module):
return event_id
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_achievements_settings(self):
@ -323,7 +323,7 @@ class Achievements(Module):
return settings
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _join_system(self, nick):
@ -339,7 +339,7 @@ class Achievements(Module):
return nick + ' joined.'
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _leave_system(self, nick):
@ -355,7 +355,7 @@ class Achievements(Module):
return nick + ' left.'
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _add_player_to_achievement_log(self, player_id, achievement_id):
@ -371,7 +371,7 @@ class Achievements(Module):
return
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_achievement_info(self, achievement):
@ -387,7 +387,7 @@ class Achievements(Module):
return result['desc']
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_player_achievements(self, nick):
@ -412,7 +412,7 @@ class Achievements(Module):
return achievements
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _do_achievement_scan(self):
@ -446,7 +446,7 @@ class Achievements(Module):
achievements = cursor.fetchall()
for achievement in achievements:
print('checking achievement:[' + achievement['name'] + ']')
self.log.debug('checking achievement:[' + achievement['name'] + ']')
query = '''
SELECT p.id, p.nick FROM achievements_player p WHERE
p.nick IN (
@ -465,7 +465,7 @@ class Achievements(Module):
ach_achievers = cursor.fetchall()
for ach_achiever in ach_achievers:
print('name:[' + ach_achiever['nick'] + '] achievement:[' + achievement['name'] + ']')
self.log.debug('name:[' + ach_achiever['nick'] + '] achievement:[' + achievement['name'] + ']')
self._add_player_to_achievement_log(ach_achiever['id'], achievement['id'])
achievers.append((ach_achiever['nick'], achievement['name']))
@ -473,7 +473,7 @@ class Achievements(Module):
return achievers
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
# vi:tabstop=4:expandtab:autoindent

View File

@ -285,7 +285,7 @@ class Acro(Module):
i = 0
for s in self.game.rounds[-1].sub_shuffle:
print(str(i) + " is " + s)
self.log.debug(str(i) + " is " + s)
self.sendmsg(self.game.connection, self.game.channel,
" {0:d}: {1:s}".format(i+1, self.game.rounds[-1].submissions[s]))
i += 1
@ -296,7 +296,7 @@ class Acro(Module):
if self.game.state == 3:
acros = self.game.rounds[-1].submissions
if int(vote) > 0 and int(vote) <= len(acros):
print(vote + " is " + self.game.rounds[-1].sub_shuffle[int(vote)-1])
self.log.debug(vote + " is " + self.game.rounds[-1].sub_shuffle[int(vote)-1])
key = self.game.rounds[-1].sub_shuffle[int(vote)-1]
if key != nick:

View File

@ -62,7 +62,7 @@ class Facts(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def do(self, connection, event, nick, userhost, what, admin_unlocked):

View File

@ -77,7 +77,7 @@ class Karma(Module):
except sqlite3.Error as e:
conn.rollback()
conn.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if (version < 2):
conn = self.get_db()
@ -95,7 +95,7 @@ class Karma(Module):
except sqlite3.Error as e:
conn.rollback()
conn.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if (version < 3):
conn = self.get_db()
@ -109,7 +109,7 @@ class Karma(Module):
except sqlite3.Error as e:
conn.rollback()
conn.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def do(self, connection, event, nick, userhost, what, admin_unlocked):

View File

@ -135,7 +135,7 @@ class Markov(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def register_handlers(self):
@ -319,7 +319,7 @@ class Markov(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error in Markov._learn_line: " + str(e))
self.log.error("sqlite error in Markov._learn_line: " + str(e))
raise
def _generate_line(self, target, line='', min_size=15, max_size=100):
@ -437,7 +437,7 @@ class Markov(Module):
return values
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._retrieve_chains_for_key: ' + str(e))
self.log.error('sqlite error in Markov._retrieve_chains_for_key: ' + str(e))
raise
def _retrieve_k2_for_value(self, v, context_id):
@ -457,7 +457,7 @@ class Markov(Module):
return values
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._retrieve_k2_for_value: ' + str(e))
self.log.error('sqlite error in Markov._retrieve_k2_for_value: ' + str(e))
raise
def _get_chatter_targets(self):
@ -473,7 +473,7 @@ class Markov(Module):
return results
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._get_chatter_targets: ' + str(e))
self.log.error('sqlite error in Markov._get_chatter_targets: ' + str(e))
raise
def _get_one_chatter_target(self):
@ -500,7 +500,7 @@ class Markov(Module):
return None
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._get_max_chain_id: ' + str(e))
self.log.error('sqlite error in Markov._get_max_chain_id: ' + str(e))
raise
def _get_context_id_for_target(self, target):
@ -526,7 +526,7 @@ class Markov(Module):
return self._get_context_id_for_target(target)
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._get_context_id_for_target: ' + str(e))
self.log.error('sqlite error in Markov._get_context_id_for_target: ' + str(e))
raise
def _add_context_for_target(self, target):
@ -548,7 +548,7 @@ class Markov(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error in Markov._add_context_for_target: " + str(e))
self.log.error("sqlite error in Markov._add_context_for_target: " + str(e))
raise
try:
db = self.get_db()
@ -569,7 +569,7 @@ class Markov(Module):
return self._get_context_id_for_target(target)
except sqlite3.Error as e:
db.close()
print('sqlite error in Markov._get_context_id_for_target: ' + str(e))
self.log.error('sqlite error in Markov._get_context_id_for_target: ' + str(e))
raise
# vi:tabstop=4:expandtab:autoindent

View File

@ -66,7 +66,7 @@ class Pi(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def do(self, connection, event, nick, userhost, what, admin_unlocked):

View File

@ -51,7 +51,7 @@ class Seen(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if version < 2:
db = self.get_db()
@ -75,7 +75,7 @@ class Seen(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def do(self, connection, event, nick, userhost, what, admin_unlocked):
@ -96,7 +96,7 @@ class Seen(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
match = re.search('^!seen\s+(\S+)$', what)
@ -117,7 +117,7 @@ class Seen(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
# vi:tabstop=4:expandtab:autoindent

View File

@ -159,7 +159,7 @@ class Storycraft(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def do(self, connection, event, nick, userhost, what, admin_unlocked):
@ -555,7 +555,7 @@ class Storycraft(Module):
return game
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_game_summary(self, game):
@ -616,7 +616,7 @@ class Storycraft(Module):
return cur.lastrowid
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_player_list_for_game(self, game_id):
@ -643,7 +643,7 @@ class Storycraft(Module):
return players
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_game_exists(self, game_id):
@ -666,7 +666,7 @@ class Storycraft(Module):
return game_id
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _pick_next_player(self, game_id):
@ -730,7 +730,7 @@ class Storycraft(Module):
return cur.lastrowid
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _end_game(self, game_id):
@ -749,7 +749,7 @@ class Storycraft(Module):
return game_id
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_player_by_id(self, player_id):
@ -773,7 +773,7 @@ class Storycraft(Module):
return player
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_player_by_userhost_in_game(self, game_id, userhost):
@ -797,7 +797,7 @@ class Storycraft(Module):
return player
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_completed_games(self):
@ -853,7 +853,7 @@ class Storycraft(Module):
return games
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_games_waiting_on_player(self, player_nick):
@ -905,7 +905,7 @@ class Storycraft(Module):
return games
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_games_of_type(self, game_type):
@ -944,7 +944,7 @@ class Storycraft(Module):
return games
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _add_player_to_game(self, game_id, nick, userhost):
@ -963,7 +963,7 @@ class Storycraft(Module):
return cur.lastrowid
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _get_player_exists_in_game(self, game_id, userhost):
@ -1009,7 +1009,7 @@ class Storycraft(Module):
count = result['COUNT(*)']
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
return count
@ -1029,7 +1029,7 @@ class Storycraft(Module):
concurrency = result['concurrent_games']
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
return concurrency
@ -1063,7 +1063,7 @@ class Storycraft(Module):
return lines
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _update_line(self, line_id, input_line):
@ -1081,7 +1081,7 @@ class Storycraft(Module):
return line_id
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
def _export_game_to_disk(self, game, lines):
@ -1144,7 +1144,7 @@ class Storycraft(Module):
return settings
except sqlite3.Error as e:
db.close()
print('sqlite error: ' + str(e))
self.log.error('sqlite error: ' + str(e))
raise
# vi:tabstop=4:expandtab:autoindent

View File

@ -81,9 +81,9 @@ class Twitter(Module):
# print timeline stuff. this will set up the appropriate timer
self._check_self_timeline()
print("Logged in to Twitter with saved token.")
self.log.debug("Logged in to Twitter with saved token.")
else:
print("Could not log in to Twitter with saved token.")
self.log.error("Could not log in to Twitter with saved token.")
self.twit = twitter.Api()
else:
# create a default twitter API account, in case we never auth
@ -113,7 +113,7 @@ class Twitter(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
if version < 2:
db = self.get_db()
@ -129,7 +129,7 @@ class Twitter(Module):
except sqlite3.Error as e:
db.rollback()
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def shutdown(self):
@ -200,7 +200,7 @@ class Twitter(Module):
else:
index = 0
except ValueError as e:
print("Couldn't convert index: " + str(e))
self.log.error("Couldn't convert index: " + str(e))
index = 0
count = (-1*index) + 1
@ -310,7 +310,7 @@ class Twitter(Module):
try:
return self.twit.VerifyCredentials()
except Exception as e:
print("Exception in checking login status: " + str(e))
self.log.error("Exception in checking login status: " + str(e))
return None
def _log_in_to_twitter(self, oauth_token, oauth_token_secret):
@ -405,7 +405,7 @@ class Twitter(Module):
return result['since_id']
except sqlite3.Error as e:
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def _get_output_channel(self):
@ -421,7 +421,7 @@ class Twitter(Module):
return result['output_channel']
except sqlite3.Error as e:
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def _set_last_since_id(self, since_id):
@ -436,7 +436,7 @@ class Twitter(Module):
db.close()
except sqlite3.Error as e:
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def _get_latest_tweet_id(self, tweets, since_id):
@ -461,7 +461,7 @@ class Twitter(Module):
db.close()
except sqlite3.Error as e:
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise
def _retrieve_stored_auth_tokens(self):
@ -477,7 +477,7 @@ class Twitter(Module):
return (result['oauth_token'], result['oauth_token_secret'])
except sqlite3.Error as e:
db.close()
print("sqlite error: " + str(e))
self.log.error("sqlite error: " + str(e))
raise