[libvirt] [Patch 2/3]virsh: Make "DEBUG" loglevel the superset

Jiri Denemark jdenemar at redhat.com
Thu Jul 14 11:58:02 UTC 2011


On Thu, Jun 30, 2011 at 13:52:32 +0530, Supriya Kannery wrote:
> Aligning loglevel values of virsh to that of libvirt. 
> "DEBUG"=0 loglevel, when specified through commandline or
> env variable, should log all the messages. "ERROR=4" 
> should log only error messages. 
> 
> Signed-off-by: Supriya Kannery <supriyak at in.ibm.com>
> 
> ---
>  tools/virsh.c |   12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> Index: libvirt/tools/virsh.c
> ===================================================================
> --- libvirt.orig/tools/virsh.c
> +++ libvirt/tools/virsh.c
> @@ -13285,13 +13285,17 @@ vshDebug(vshControl *ctl, int level, con
>      va_list ap;
>      char *str;
>  
> +    /* Aligning log levels to that of libvirt.
> +     * Traces with levels >=  user-specified-level
> +     * gets logged into file
> +     */
> +    if (level < ctl->debug)
> +        return;
> +
>      va_start(ap, format);
> -    vshOutputLogFile(ctl, VSH_ERR_DEBUG, format, ap);
> +    vshOutputLogFile(ctl, level, format, ap);
>      va_end(ap);
>  
> -    if (level > ctl->debug)
> -        return;
> -
>      va_start(ap, format);
>      if (virVasprintf(&str, format, ap) < 0) {
>          /* Skip debug messages on low memory */
> 

This breaks make check for two reasons. First, it reverses the condition but
leaves default level unchanged, so instead of not printint anything but errors
before the patch it now prints all debug messages by default. Second, you
forgot to change -d5 option passed to virsh in tests/virsh-optparse to -d0;
the script wants to see all debug messages.

In other words, the following patch needs to be squashed in.

Jirka

diff --git a/tests/virsh-optparse b/tests/virsh-optparse
index 092e80d..7b3a25d 100755
--- a/tests/virsh-optparse
+++ b/tests/virsh-optparse
@@ -64,7 +64,7 @@ for args in \
     '--count 2 test' \
     '--count=2 test' \
 ; do
-  virsh -d5 -c $test_url setvcpus $args >out 2>>err || fail=1
+  virsh -d0 -c $test_url setvcpus $args >out 2>>err || fail=1
   LC_ALL=C sort out | compare - exp-out || fail=1
 done
 test -s err && fail=1
diff --git a/tools/virsh.c b/tools/virsh.c
index dda86cb..6d356d2 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -98,6 +98,8 @@ typedef enum {
     VSH_ERR_ERROR
 } vshErrorLevel;
 
+#define VSH_DEBUG_DEFAULT VSH_ERR_ERROR
+
 /*
  * virsh command line grammar:
  *
@@ -13406,15 +13408,17 @@ vshInit(vshControl *ctl)
     if (ctl->conn)
         return false;
 
-    if (ctl->debug == -1) {
+    if (ctl->debug == VSH_DEBUG_DEFAULT) {
         /* log level not set from commandline, check env variable */
         debugEnv = getenv("VIRSH_DEBUG");
         if (debugEnv) {
-            if (virStrToLong_i(debugEnv, NULL, 10, &ctl->debug) < 0 ||
-                ctl->debug < VSH_ERR_DEBUG || ctl->debug > VSH_ERR_ERROR) {
+            int debug;
+            if (virStrToLong_i(debugEnv, NULL, 10, &debug) < 0 ||
+                debug < VSH_ERR_DEBUG || debug > VSH_ERR_ERROR) {
                 vshError(ctl, "%s",
                          _("VIRSH_DEBUG not set with a valid numeric value"));
-                ctl->debug = VSH_ERR_DEBUG;
+            } else {
+                ctl->debug = debug;
             }
         }
     }
@@ -14102,7 +14106,7 @@ main(int argc, char **argv)
     memset(ctl, 0, sizeof(vshControl));
     ctl->imode = true;          /* default is interactive mode */
     ctl->log_fd = -1;           /* Initialize log file descriptor */
-    ctl->debug = -1;            /* Initialize log level */
+    ctl->debug = VSH_DEBUG_DEFAULT;
 
     if (!setlocale(LC_ALL, "")) {
         perror("setlocale");




More information about the libvir-list mailing list