From 38ba2bfca47aac56a95ffc0f9e9b67a46744d509 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 20 Dec 2007 17:26:49 +0000 Subject: [PATCH] logging utility --- system/logger.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 system/logger.py diff --git a/system/logger.py b/system/logger.py new file mode 100644 index 0000000..c308df7 --- /dev/null +++ b/system/logger.py @@ -0,0 +1,62 @@ +import os +import traceback +import time + +class Logfile: + """ + Represents a logfile. Used to write data to a file. e.g. + + logfile = Logfile('filename') + print >> logfile, data + """ + def __init__(self, filename): + self.filename = filename + + def write(self, data): + try: + fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0644) + os.write(fd, '%s' % data) + os.close(fd) + except OSError: + sys.stderr.write(data) + sys.stderr.flush() + + + +def log(method, method_name = None, \ + log_filename = 'system.log', errorlog_filename = 'system_error.log'): + """ + Logs whether the specified method completed successfully or not and + returns the method result. Use as a decorator, e.g., + + @log + def foo(...): + ... + + Or: + def foo(...): + ... + foo = log(foo) + + Or: + result = log(foo)(...) + + """ + logfile = Logfile(log_filename) + error_logfile = Logfile(errorlog_filename) + + if method_name is None: + method_name = method.__name__ + + def wrapper(*args, **kwds): + + print >> logfile, method_name + ": ", + try: + #print >> logfile, args, + result = method(*args, **kwds) + print >> logfile, " [OK]" + except: + print >>logfile, " [FAILED]" + print >> error_logfile, "%s: %s\n" % (method_name, traceback.format_exc()) + + return wrapper -- 2.47.0