From 532e1463fcfb71738316a86420ae4fcb07b56ac3 Mon Sep 17 00:00:00 2001 From: Ansis Atteka Date: Sat, 13 Jun 2015 13:28:02 -0700 Subject: [PATCH] vlog: add "vlog/list-pattern" command This patch allows to query logging format at the runtime for each destination with "vlog/list-pattern" command. Signed-off-by: Ansis Atteka Acked-by: Ben Pfaff --- NEWS | 2 ++ include/openvswitch/vlog.h | 1 + lib/vlog-unixctl.man | 3 +++ lib/vlog.c | 39 ++++++++++++++++++++++++++++++++++++++ utilities/ovs-appctl.8.in | 3 +++ utilities/ovs-appctl.c | 1 + 6 files changed, 49 insertions(+) diff --git a/NEWS b/NEWS index 0d2392abc..c59f3a8d8 100644 --- a/NEWS +++ b/NEWS @@ -119,6 +119,8 @@ v2.4.0 - xx xxx xxxx See ovs-sim(1) for more information. - Support to configure method (--syslog-method argument) that determines how daemons will talk with syslog. + - Support for "ovs-appctl vlog/list-pattern" command that lets to query + logging message format for each destination. v2.3.0 - 14 Aug 2014 diff --git a/include/openvswitch/vlog.h b/include/openvswitch/vlog.h index f2fedae31..f6bb3abdd 100644 --- a/include/openvswitch/vlog.h +++ b/include/openvswitch/vlog.h @@ -133,6 +133,7 @@ void vlog_set_levels(struct vlog_module *, char *vlog_set_levels_from_string(const char *) OVS_WARN_UNUSED_RESULT; void vlog_set_levels_from_string_assert(const char *); char *vlog_get_levels(void); +char *vlog_get_patterns(void); bool vlog_is_enabled(const struct vlog_module *, enum vlog_level); bool vlog_should_drop(const struct vlog_module *, enum vlog_level, struct vlog_rate_limit *); diff --git a/lib/vlog-unixctl.man b/lib/vlog-unixctl.man index 85dd11de0..7c47634fa 100644 --- a/lib/vlog-unixctl.man +++ b/lib/vlog-unixctl.man @@ -51,6 +51,9 @@ Sets the log pattern for \fIdestination\fR to \fIpattern\fR. Refer to .IP "\fBvlog/list\fR" Lists the supported logging modules and their current levels. . +.IP "\fBvlog/list-pattern\fR" +Lists logging patterns used for each destination. +. .IP "\fBvlog/reopen\fR" Causes \fB\*(PN\fR to close and reopen its log file. (This is useful after rotating log files, to cause a new log file to be used.) diff --git a/lib/vlog.c b/lib/vlog.c index e5de1a157..09351a806 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -614,6 +614,17 @@ vlog_unixctl_list(struct unixctl_conn *conn, int argc OVS_UNUSED, free(msg); } +static void +vlog_unixctl_list_pattern(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED) +{ + char *msg; + + msg = vlog_get_patterns(); + unixctl_command_reply(conn, msg); + free(msg); +} + static void vlog_unixctl_reopen(struct unixctl_conn *conn, int argc OVS_UNUSED, const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED) @@ -721,6 +732,8 @@ vlog_init(void) 1, INT_MAX, vlog_unixctl_set, NULL); unixctl_command_register("vlog/list", "", 0, 0, vlog_unixctl_list, NULL); + unixctl_command_register("vlog/list-pattern", "", 0, 0, + vlog_unixctl_list_pattern, NULL); unixctl_command_register("vlog/enable-rate-limit", "[module]...", 0, INT_MAX, vlog_enable_rate_limit, NULL); unixctl_command_register("vlog/disable-rate-limit", "[module]...", @@ -785,6 +798,32 @@ vlog_get_levels(void) return ds_cstr(&s); } +/* Returns as a string current logging patterns for each destination. + * This string must be released by caller. */ +char * +vlog_get_patterns(void) +{ + struct ds ds = DS_EMPTY_INITIALIZER; + enum vlog_destination destination; + + ovs_rwlock_rdlock(&pattern_rwlock); + ds_put_format(&ds, " prefix format\n"); + ds_put_format(&ds, " ------ ------\n"); + + for (destination = 0; destination < VLF_N_DESTINATIONS; destination++) { + struct destination *f = &destinations[destination];; + const char *prefix = "none"; + + if (destination == VLF_SYSLOG && syslogger) { + prefix = syslog_get_prefix(syslogger); + } + ds_put_format(&ds, "%-7s %-32s %s\n", f->name, prefix, f->pattern); + } + ovs_rwlock_unlock(&pattern_rwlock); + + return ds_cstr(&ds); +} + /* Returns true if a log message emitted for the given 'module' and 'level' * would cause some log output, false if that module and level are completely * disabled. */ diff --git a/utilities/ovs-appctl.8.in b/utilities/ovs-appctl.8.in index 9e33f612d..f477534eb 100644 --- a/utilities/ovs-appctl.8.in +++ b/utilities/ovs-appctl.8.in @@ -112,6 +112,9 @@ and adjusting log levels. .IP "\fBvlog/list\fR" Lists the known logging modules and their current levels. . +.IP "\fBvlog/list-pattern\fR" +Lists logging pattern used for each destination. +. .IP "\fBvlog/set\fR [\fIspec\fR]" Sets logging levels. Without any \fIspec\fR, sets the log level for every module and destination to \fBdbg\fR. Otherwise, \fIspec\fR is a diff --git a/utilities/ovs-appctl.c b/utilities/ovs-appctl.c index f7403f795..ff6163cd8 100644 --- a/utilities/ovs-appctl.c +++ b/utilities/ovs-appctl.c @@ -92,6 +92,7 @@ Common commands:\n\ list-commands List commands supported by the target\n\ version Print version of the target\n\ vlog/list List current logging levels\n\ + vlog/list-pattern List logging patterns for each destination.\n\ vlog/set [SPEC]\n\ Set log levels as detailed in SPEC, which may include:\n\ A valid module name (all modules, by default)\n\ -- 2.20.1