logging utility
authorTony Mack <tmack@cs.princeton.edu>
Thu, 20 Dec 2007 17:26:49 +0000 (17:26 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Thu, 20 Dec 2007 17:26:49 +0000 (17:26 +0000)
system/logger.py [new file with mode: 0644]

diff --git a/system/logger.py b/system/logger.py
new file mode 100644 (file)
index 0000000..c308df7
--- /dev/null
@@ -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