-# $Id$
-# $URL$
"""A very simple logger that tries to be concurrency-safe."""
LOG_NODE=1
LOG_VERBOSE=2
# default is to log a reasonable amount of stuff for when running on operational nodes
-LOG_LEVEL=1
+LOG_LEVEL=LOG_NODE
def set_level(level):
global LOG_LEVEL
- assert level in [LOG_NONE,LOG_NODE,LOG_VERBOSE]
- LOG_LEVEL=level
+ try:
+ assert level in [LOG_NONE,LOG_NODE,LOG_VERBOSE]
+ LOG_LEVEL=level
+ except:
+ logger.log("Failed to set LOG_LEVEL to %s"%level)
def verbose(msg):
log('(v) '+msg,LOG_VERBOSE)
def log_exc(msg="",name=None):
"""Log the traceback resulting from an exception."""
- if name:
+ if name:
log("%s: EXCEPTION caught <%s> \n %s" %(name, msg, traceback.format_exc()))
else:
log("EXCEPTION caught <%s> \n %s" %(msg, traceback.format_exc()))
log_data_in_file (db, LOG_DATABASE, "raw database")
#################### child processes
-# avoid waiting until the process returns;
+# avoid waiting until the process returns;
# that makes debugging of hanging children hard
class Buffer:
def __init__ (self,message='log_call: '):
self.buffer=''
self.message=message
-
+
def add (self,c):
self.buffer += c
if c=='\n': self.flush()
verbose("log_call: poll=%r s" % poll)
trigger=time.time()+timeout
result = False
- try:
- child = subprocess.Popen(command, bufsize=1,
+ try:
+ child = subprocess.Popen(command, bufsize=1,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
buffer = Buffer()
while True:
if returncode != None:
buffer.flush()
# child is done and return 0
- if returncode == 0:
+ if returncode == 0:
log("log_call:end command (%s) completed" % message)
result=True
break