from datetime import datetime from contextlib import contextmanager import sys @contextmanager def no_ts(): sys.stdout.ts = False yield sys.stdout.ts = True class TSWrapper(object): def __init__(self, stream): self.o = stream self.files = [] self.files.append(self.o) self.newline = True self.ts = True def write(self, s): d = datetime.now() if self.ts: buf = "" lines = s.splitlines(True) for line in lines: if self.newline: buf += d.strftime('[ %Y%m%d %H:%M:%S ] : {0}'.format(line)) else: buf += str(line) if line[-1] == '\n': self.newline = True else: self.newline = False else: buf = s for fh in self.files: fh.write(buf) fh.flush() def log_to_file(self, fn): fp = open(fn, 'a') self.files.append(fp) def __getattr__(self, attr): return getattr(self.o, attr)