modify header() to make logging output optional.
[tests.git] / qaapi / qa / logger.py
1 import os
2 import traceback
3 import time
4 import sys
5
6 class Logfile:
7     """
8     Represents a logfile. Used to write data to a file. e.g.
9
10         logfile = Logfile('filename')
11         print >> logfile, data          
12     """         
13     def __init__(self, filename):
14         self.filename = filename
15
16     def write(self, data):
17         try:
18             fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0644)
19             os.write(fd, '%s' % data)
20             os.close(fd)
21         except OSError:
22             sys.stderr.write(data)
23             sys.stderr.flush()
24
25 log_filename = '/var/log/qaapi.log'
26 logfile = Logfile(log_filename)
27
28 def log(method, method_name = None, \
29         log_filename = 'system.log', errorlog_filename = 'system_error.log'):
30     """
31     Logs whether the specified method completed successfully or not and 
32     returns the method result. Use as a decorator, e.g.,
33         
34         @log
35         def foo(...):
36             ...
37         
38     Or:
39         def foo(...):
40             ...
41         foo = log(foo)
42
43     Or:
44         result = log(foo)(...)                  
45
46     """
47     logfile = Logfile(log_filename)
48     error_logfile = Logfile(errorlog_filename)                  
49     
50     if method_name is None:
51         method_name = method.__name__
52     
53     def wrapper(*args, **kwds):
54         
55         print >> logfile, method_name + ": ",
56         try:
57             #print >> logfile, args, 
58             result = method(*args, **kwds)
59             print >> logfile, " [OK]"
60         except:
61             print >>logfile, " [FAILED]"
62             print >> error_logfile, "%s: %s\n" % (method_name, traceback.format_exc())
63             raise
64
65     return wrapper
66