def mtail( logfiles ): for fn, line in multitail( logfiles ): msg = '%s: %s' % (fn, line.rstrip('\n')) def notify(): #msg = str(time.time()) + " " + msg for sub in subscriptions[:]: sub.put(msg) gevent.spawn(notify)
logging.getLogger('').setLevel(logging.INFO) logging.getLogger('requests').setLevel(logging.ERROR) logging.getLogger('multitail').setLevel(logging.ERROR) json_data=open(args.config) config = json.load(json_data) json_data.close() authorization = (config['username'], config['password']) latest_completed_backup = None logging.debug("starting up") for fn, line in multitail([config['log_path']]): match = TM_PREFIX.search(line) if not match: continue if TM_STARTED.search(line): latest_completed_backup = None logging.info("started new backup") continue if reduce((lambda x,y: x or y), map(lambda x: x in line, TM_ERROR)): logging.error("backup error: "+line[match.end():]) latest_completed_backup = None continue match = TM_COMPLETE.search(line) if match: latest_completed_backup = match.group(1) continue
def _run_multitail(self): import multitail for fn, line in multitail.multitail(self.targets["files"]): severity, msg = self._filter(fn, line.rstrip()) self._print(severity, msg, fn)
#!/usr/bin/env python2 import argparse import multitail parser = argparse.ArgumentParser() parser.add_argument('files', type=str, nargs='+') args = parser.parse_args() for fn, line in multitail.multitail(args.files): print("{}: {}".format(fn,line.strip()))
example to tail multiple files and append the filename to the beginning of the output. """ import argparse import multitail import sys # http://stackoverflow.com/questions/107705 class Unbuffered(object): def __init__(self, stream): self.stream = stream def write(self, data): self.stream.write(data) self.stream.flush() def __getattr__(self, attr): return getattr(self.stream, attr) sys.stdout = Unbuffered(sys.stdout) parser = argparse.ArgumentParser() parser.add_argument('files', type=str, nargs='+') args = parser.parse_args() for fn, line in multitail.multitail(args.files): print("{}: {}".format(fn, line.strip()))