import time import traceback import sys timeformat = "%Y-%m-%d %H:%M:%S %Z" pri_low = 1 pri_normal = 2 pri_high = 3 def log(msg, priority = pri_normal): print "[%s] %s" % (time.strftime(timeformat), msg) sys.stdout.flush() def logexception(msg, priority = pri_normal, args = None, kwargs = None): log(msg + "\n" + "args = %s\n" % repr(args) + "kwargs = %s\n" % repr(kwargs) + traceback.format_exc(), priority) class FunctionLogger: def __init__(function, msg = None, priority = pri_normal): self.function = function if msg is not None: self.msg = msg else: self.msg = "Exception in %s:" % function.__name__ self.priority = priority def __call__(*args, **kwargs): try: self.function(*args, **kwargs) except KeyboardInterrupt: raise except: logexception(self.msg, self.priority, args, kwargs)