Merge branch 'ipv6'
[nodemanager.git] / logger.py
index 64fa5ae..b38c872 100644 (file)
--- a/logger.py
+++ b/logger.py
@@ -16,12 +16,15 @@ LOG_NONE=0
 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)
@@ -39,12 +42,25 @@ def log(msg,level=LOG_NODE):
         sys.stderr.write(msg)
         sys.stderr.flush()
 
+date_width=24
 def log_exc(msg="",name=None):
-    """Log the traceback resulting from an exception."""
-    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 traceback resulting from an exception."""
+    printout=""
+    if name: printout += "%s: "%name
+    printout += "EXCEPTION caught <%s> \n" %msg
+    for frame in traceback.format_exc().split("\n"):
+        printout+=(date_width+2)*" "+"%s\n"%frame
+    log(printout)
+
+def log_trace(msg="",name=None):
+    """Log current stack"""
+    printout=""
+    if name: printout += "%s: "%name
+    printout += "LOGTRACE\n"
+    for frame in traceback.format_stack():
+        printout += "..."+frame
+    log(printout)
+
 
 ########## snapshot data to a file
 # for some reason the various modules are still triggered even when the