diff -r 2209e66bb50b -r 500cd0405c7a script/lib/iri_tweet/utils.py --- a/script/lib/iri_tweet/utils.py Fri Aug 12 18:17:27 2011 +0200 +++ b/script/lib/iri_tweet/utils.py Wed Aug 17 18:32:07 2011 +0200 @@ -3,10 +3,11 @@ ACCESS_TOKEN_SECRET, adapt_date, adapt_json, TweetSource, TweetLog, MediaType, Media, EntityMedia, Entity, EntityType) from sqlalchemy.sql import select, or_ #@UnresolvedImport +import Queue #@UnresolvedImport import anyjson #@UnresolvedImport import datetime import email.utils -import logging #@UnresolvedImport +import logging import os.path import sys import twitter.oauth #@UnresolvedImport @@ -14,7 +15,6 @@ import twitter_text #@UnresolvedImport - CACHE_ACCESS_TOKEN = {} def get_oauth_token(token_file_path=None, check_access_token=True, application_name=APPLICATION_NAME, consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET): @@ -448,7 +448,7 @@ self.obj_buffer.persists(self.session) -def set_logging(options, plogger=None): +def set_logging(options, plogger=None, queue=None): logging_config = { "format" : '%(asctime)s %(levelname)s:%(name)s:%(message)s', @@ -466,14 +466,17 @@ if logger is None: logger = get_logger() #@UndefinedVariable - if len(logger.handlers) == 0: + if len(logger.handlers) == 0: filename = logging_config.get("filename") - if filename: + if queue is not None: + hdlr = QueueHandler(queue, True) + elif filename: mode = logging_config.get("filemode", 'a') hdlr = logging.FileHandler(filename, mode) #@UndefinedVariable else: stream = logging_config.get("stream") hdlr = logging.StreamHandler(stream) #@UndefinedVariable + fs = logging_config.get("format", logging.BASIC_FORMAT) #@UndefinedVariable dfs = logging_config.get("datefmt", None) fmt = logging.Formatter(fs, dfs) #@UndefinedVariable @@ -484,6 +487,7 @@ logger.setLevel(level) options.debug = (options.verbose-options.quiet > 0) + return logger def set_logging_options(parser): parser.add_option("-l", "--log", dest="logfile", @@ -536,5 +540,47 @@ return query.distinct() +logger_name = "iri.tweet" + def get_logger(): - return logging.getLogger("iri_tweet") #@UndefinedVariable + global logger_name + return logging.getLogger(logger_name) #@UndefinedVariable + + +# Next two import lines for this demo only + +class QueueHandler(logging.Handler): #@UndefinedVariable + """ + This is a logging handler which sends events to a multiprocessing queue. + """ + + def __init__(self, queue, ignore_full): + """ + Initialise an instance, using the passed queue. + """ + logging.Handler.__init__(self) #@UndefinedVariable + self.queue = queue + self.ignore_full = True + + def emit(self, record): + """ + Emit a record. + + Writes the LogRecord to the queue. + """ + try: + ei = record.exc_info + if ei: + dummy = self.format(record) # just to get traceback text into record.exc_text + record.exc_info = None # not needed any more + if not self.ignore_full or not self.queue.full(): + self.queue.put_nowait(record) + except Queue.Full: + if self.ignore_full: + pass + else: + raise + except (KeyboardInterrupt, SystemExit): + raise + except: + self.handleError(record)