jsonrpc: Only compose message to log if it's really going to be logged.
authorBen Pfaff <blp@nicira.com>
Fri, 25 Oct 2013 16:22:37 +0000 (09:22 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 25 Oct 2013 18:24:16 +0000 (11:24 -0700)
This suppresses a testsuite failure when the testsuite is run from a
directory whose name contains a non-ASCII character.  I'd rather fix the
problem but webpages like the following make it sound difficult or
impossible on Python 2.x: http://stackoverflow.com/a/11742928

Signed-off-by: Ben Pfaff <blp@nicira.com>
python/ovs/jsonrpc.py
python/ovs/vlog.py

index c1540eb..6e7a2cc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2011, 2012 Nicira, Inc.
+# Copyright (c) 2010, 2011, 2012, 2013 Nicira, Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -226,7 +226,8 @@ class Connection(object):
         return self.received_bytes
 
     def __log_msg(self, title, msg):
-        vlog.dbg("%s: %s %s" % (self.name, title, msg))
+        if vlog.dbg_is_enabled():
+            vlog.dbg("%s: %s %s" % (self.name, title, msg))
 
     def send(self, msg):
         if self.status:
index 8447c0c..478f08e 100644 (file)
@@ -92,6 +92,29 @@ class Vlog:
     def dbg(self, message, **kwargs):
         self.__log("DBG", message, **kwargs)
 
+    def __is_enabled(self, level):
+        level = LEVELS.get(level.lower(), logging.DEBUG)
+        for f, f_level in Vlog.__mfl[self.name].iteritems():
+            f_level = LEVELS.get(f_level, logging.CRITICAL)
+            if level >= f_level:
+                return True
+        return False
+
+    def emer_is_enabled(self):
+        return self.__is_enabled("EMER")
+
+    def err_is_enabled(self):
+        return self.__is_enabled("ERR")
+
+    def warn_is_enabled(self):
+        return self.__is_enabled("WARN")
+
+    def info_is_enabled(self):
+        return self.__is_enabled("INFO")
+
+    def dbg_is_enabled(self):
+        return self.__is_enabled("DBG")
+
     def exception(self, message):
         """Logs 'message' at ERR log level.  Includes a backtrace when in
         exception context."""