]> xenbits.xensource.com Git - libvirt.git/commitdiff
virt-admin: Wire-up the logging APIs
authorErik Skultety <eskultet@redhat.com>
Wed, 9 Mar 2016 14:12:55 +0000 (15:12 +0100)
committerErik Skultety <eskultet@redhat.com>
Thu, 15 Dec 2016 09:36:23 +0000 (10:36 +0100)
Finally, now that all APIs have been introduced, wire them up to virt-admin
and introduce daemon-log-outputs and daemon-log-filters commands.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
tools/virt-admin.c
tools/virt-admin.pod

index 70b0e517f42a747cf03ecdba840d4ab6cc2bd23b..0fa1c000c454c1564bd6f06009887269e01d332e 100644 (file)
@@ -971,6 +971,114 @@ cmdSrvClientsSet(vshControl *ctl, const vshCmd *cmd)
     goto cleanup;
 }
 
+/* --------------------------
+ * Command daemon-log-filters
+ * --------------------------
+ */
+static const vshCmdInfo info_daemon_log_filters[] = {
+    {.name = "help",
+     .data = N_("fetch or set the currently defined set of logging filters on "
+                "daemon")
+    },
+    {.name = "desc",
+     .data = N_("Depending on whether run with or without options, the command "
+                "fetches or redefines the existing active set of filters on "
+                "daemon.")
+    },
+    {.name = NULL}
+};
+
+static const vshCmdOptDef opts_daemon_log_filters[] = {
+    {.name = "filters",
+     .type = VSH_OT_STRING,
+     .help = N_("redefine the existing set of logging filters"),
+     .flags = VSH_OFLAG_EMPTY_OK
+    },
+    {.name = NULL}
+};
+
+static bool
+cmdDaemonLogFilters(vshControl *ctl, const vshCmd *cmd)
+{
+    int nfilters;
+    char *filters = NULL;
+    vshAdmControlPtr priv = ctl->privData;
+
+    if (vshCommandOptBool(cmd, "filters")) {
+        if ((vshCommandOptStringReq(ctl, cmd, "filters",
+                                    (const char **) &filters) < 0 ||
+             virAdmConnectSetLoggingFilters(priv->conn, filters, 0) < 0)) {
+            vshError(ctl, _("Unable to change daemon logging settings"));
+            return false;
+        }
+    } else {
+        if ((nfilters = virAdmConnectGetLoggingFilters(priv->conn,
+                                                       &filters, 0)) < 0) {
+            vshError(ctl, _("Unable to get daemon logging filters information"));
+            return false;
+        }
+
+        vshPrintExtra(ctl, " %-15s", _("Logging filters: "));
+        vshPrint(ctl, "%s\n", filters ? filters : "");
+    }
+
+    return true;
+}
+
+/* --------------------------
+ * Command daemon-log-outputs
+ * --------------------------
+ */
+static const vshCmdInfo info_daemon_log_outputs[] = {
+    {.name = "help",
+     .data = N_("fetch or set the currently defined set of logging outputs on "
+                "daemon")
+    },
+    {.name = "desc",
+     .data = N_("Depending on whether run with or without options, the command "
+                "fetches or redefines the existing active set of outputs on "
+                "daemon.")
+    },
+    {.name = NULL}
+};
+
+static const vshCmdOptDef opts_daemon_log_outputs[] = {
+    {.name = "outputs",
+     .type = VSH_OT_STRING,
+     .help = N_("redefine the existing set of logging outputs"),
+     .flags = VSH_OFLAG_EMPTY_OK
+    },
+    {.name = NULL}
+};
+
+static bool
+cmdDaemonLogOutputs(vshControl *ctl, const vshCmd *cmd)
+{
+    int noutputs;
+    char *outputs = NULL;
+    vshAdmControlPtr priv = ctl->privData;
+
+    if (vshCommandOptBool(cmd, "outputs")) {
+        if ((vshCommandOptStringReq(ctl, cmd, "outputs",
+                                    (const char **) &outputs) < 0 ||
+             virAdmConnectSetLoggingOutputs(priv->conn, outputs, 0) < 0)) {
+            vshError(ctl, _("Unable to change daemon logging settings"));
+            return false;
+        }
+    } else {
+        if ((noutputs = virAdmConnectGetLoggingOutputs(priv->conn,
+                                                       &outputs, 0)) < 0) {
+            vshError(ctl, _("Unable to get daemon logging outputs information"));
+            return false;
+        }
+
+        vshPrintExtra(ctl, " %-15s", _("Logging outputs: "));
+        vshPrint(ctl, "%s\n", outputs ? outputs : "");
+    }
+
+    return true;
+}
+
 static void *
 vshAdmConnectionHandler(vshControl *ctl)
 {
@@ -1341,6 +1449,18 @@ static const vshCmdDef managementCmds[] = {
      .info = info_srv_clients_set,
      .flags = 0
     },
+    {.name = "daemon-log-filters",
+     .handler = cmdDaemonLogFilters,
+     .opts = opts_daemon_log_filters,
+     .info = info_daemon_log_filters,
+     .flags = 0
+    },
+    {.name = "daemon-log-outputs",
+     .handler = cmdDaemonLogOutputs,
+     .opts = opts_daemon_log_outputs,
+     .info = info_daemon_log_outputs,
+     .flags = 0
+    },
     {.name = NULL}
 };
 
index 443730ebf5e8b011b92095d31fdc64788216b89c..ef140824cba43a48380cc88c8096a4f291410456 100644 (file)
@@ -155,6 +155,60 @@ change its internal configuration.
 Lists all manageable servers contained within the daemon the client is
 currently connected to.
 
+=item B<daemon-log-filters> [I<--filters> B<string>]
+
+When run without arguments, this returns the currently defined set of logging
+filters. Providing an argument will cause the command to define a new set of
+logging filters.
+
+=over 4
+
+=item I<--filters>
+
+Define a new set of logging filters where multiple filters are delimited by
+space. Each filter must conform to the form described in detail by
+I</etc/libvirt/libvirtd.conf> (section 'Logging filters').
+
+=back
+
+B<Example>
+
+    To define a filter which suppresses all e.g. 'virObjectUnref' DEBUG
+    messages, use the following:
+
+        $ virt-admin daemon-log-filters "4:util.object"
+
+    (Note the '.' symbol which can be used to more fine-grained filters tailored
+     to specific modules, in contrast, to affect the whole directory containing
+     several modules this would become "4:util"):
+
+=item B<daemon-log-outputs> [I<--outputs> B<string>]
+
+When run without arguments, this returns the currently defined set of logging
+outputs. Providing an argument will cause the command to define a new set of
+logging outputs.
+
+=over 4
+
+=item I<--outputs>
+
+Define a new set of logging outputs where multiple outputs are delimited by
+space. Each output must conform to the form described in detail by
+I</etc/libvirt/libvirtd.conf> (section 'Logging outputs').
+
+=back
+
+B<Example>
+
+    To replace the current setting for logging outputs with one that writes to
+    a file while logging errors only, the following could be used:
+
+        $ virt-admin daemon-log-outputs "4:file:<absolute_path_to_the_file>"
+
+    To define multiple outputs at once they need to be delimited by spaces:
+
+        $ virt-admin daemon-log-outputs "4:stderr 2:syslog:<msg_ident>"
+
 =back
 
 =head1 SERVER COMMANDS