class PrintLogThread(threading.Thread): ''' All file printing access from one thread. Receives information when its placed on the passed queue. Called from one location: Output.handlePrint. Does not close the file: this happens in Output.endLogging. This simplifies the operation of this class, since it only has to concern itself with the queue. The path must exist before DailyLog runs for the first time. ''' def __init__(self, path, queue, name): threading.Thread.__init__(self) self.queue = queue self.writer = DailyLogFile(name, path) # Don't want this to float around if the rest of the system goes down self.setDaemon(True) def run(self): while True: result = self.queue.get(block=True) try: writable = json.dumps(result) self.writer.write(writable + '\n') self.writer.flush() except: pass self.queue.task_done()
class ChatLogger(object): def __init__(self, logfile, path): self.log = DailyLogFile(logfile, path) date = datetime.now().strftime('%a %b %d %H:%M %Y') self.log.write('--- Log opened: %s\n' % (date, )) def write_line(self, line): self.log.write(datetime.now().strftime('%H:%M ')) if isinstance(line, unicode): line = line.encode('utf-8') self.log.write(line) self.log.write('\n') self.log.flush() def action(self, nick, message): self.write_line(' * %s %s' % (nick, message)) def message(self, nick, message): self.write_line('<%s> %s' % (nick, message))