diff options
author | Dan Winship <danw@gnome.org> | 2014-01-21 09:54:50 -0500 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-01-22 09:48:42 -0500 |
commit | 1d42962e7fa8540af874c095c0095deda77aa3e5 (patch) | |
tree | f540f46ee0d84697f0c541a11b7351a5b0c62167 /src/logging | |
parent | 2b87dbb2a990fa6aee9ca1e431a2d1ee2af453e9 (diff) | |
download | NetworkManager-1d42962e7fa8540af874c095c0095deda77aa3e5.tar.gz |
logging: fix "nmcli gen log level FOO"
The change to per-domain log levels means that when setting just the
level, we need to re-set the log level for each domain (since it's the
"logging" bit array that actually determines what gets logged).
nm_logging_setup() was dealing correctly with domains=NULL, but not
domains="" (which is what happens when it is invoked with only a level
via D-Bus), so doing "nmcli gen log level DEBUG" would change the
"default" log level, but leave all of the domains still at their
previous level:
danw@laptop:NetworkManager> nmcli g log
LEVEL DOMAINS
INFO PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6...
danw@laptop:NetworkManager> nmcli g log level DEBUG
danw@laptop:NetworkManager> nmcli g log
LEVEL DOMAINS
DEBUG PLATFORM:INFO,RFKILL:INFO,ETHER:INFO,WIFI:INFO,BT:INFO...
Diffstat (limited to 'src/logging')
-rw-r--r-- | src/logging/nm-logging.c | 142 |
1 files changed, 69 insertions, 73 deletions
diff --git a/src/logging/nm-logging.c b/src/logging/nm-logging.c index e19e2acf24..21cb5d7f2e 100644 --- a/src/logging/nm-logging.c +++ b/src/logging/nm-logging.c @@ -159,101 +159,97 @@ nm_logging_setup (const char *level, GString *unrecognized = NULL; guint64 new_logging[LOGL_MAX]; guint32 new_log_level = log_level; + char **tmp, **iter; int i; - if (!domains) - domains = log_domains ? log_domains : "DEFAULT"; - for (i = 0; i < LOGL_MAX; i++) new_logging[i] = 0; /* levels */ - if (level && strlen (level)) { + if (level && *level) { if (!match_log_level (level, &new_log_level, error)) return FALSE; } /* domains */ - if (domains && strlen (domains)) { - char **tmp, **iter; - - tmp = g_strsplit_set (domains, ", ", 0); - for (iter = tmp; iter && *iter; iter++) { - const LogDesc *diter; - guint32 domain_log_level; - guint64 bits; - char *p; - - if (!strlen (*iter)) - continue; - - p = strchr (*iter, ':'); - if (p) { - *p = '\0'; - if (!match_log_level (p + 1, &domain_log_level, error)) { - g_strfreev (tmp); - return FALSE; - } - } else - domain_log_level = new_log_level; - - bits = 0; - - /* Check for combined domains */ - if (!g_ascii_strcasecmp (*iter, LOGD_ALL_STRING)) - bits = LOGD_ALL; - else if (!g_ascii_strcasecmp (*iter, LOGD_DEFAULT_STRING)) - bits = LOGD_DEFAULT; - else if (!g_ascii_strcasecmp (*iter, LOGD_DHCP_STRING)) - bits = LOGD_DHCP; - else if (!g_ascii_strcasecmp (*iter, LOGD_IP_STRING)) - bits = LOGD_IP; - - /* Check for compatibility domains */ - else if (!g_ascii_strcasecmp (*iter, "HW")) - bits = LOGD_PLATFORM; - - else { - for (diter = &domain_descs[0]; diter->name; diter++) { - if (!g_ascii_strcasecmp (diter->name, *iter)) { - bits = diter->num; - break; - } - } - } + if (!domains || !*domains) + domains = log_domains ? log_domains : "DEFAULT"; + + tmp = g_strsplit_set (domains, ", ", 0); + for (iter = tmp; iter && *iter; iter++) { + const LogDesc *diter; + guint32 domain_log_level; + guint64 bits; + char *p; + + if (!strlen (*iter)) + continue; - if (!bits) { - if (!bad_domains) { - g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_DOMAIN, - _("Unknown log domain '%s'"), *iter); - return FALSE; + p = strchr (*iter, ':'); + if (p) { + *p = '\0'; + if (!match_log_level (p + 1, &domain_log_level, error)) { + g_strfreev (tmp); + return FALSE; + } + } else + domain_log_level = new_log_level; + + bits = 0; + + /* Check for combined domains */ + if (!g_ascii_strcasecmp (*iter, LOGD_ALL_STRING)) + bits = LOGD_ALL; + else if (!g_ascii_strcasecmp (*iter, LOGD_DEFAULT_STRING)) + bits = LOGD_DEFAULT; + else if (!g_ascii_strcasecmp (*iter, LOGD_DHCP_STRING)) + bits = LOGD_DHCP; + else if (!g_ascii_strcasecmp (*iter, LOGD_IP_STRING)) + bits = LOGD_IP; + + /* Check for compatibility domains */ + else if (!g_ascii_strcasecmp (*iter, "HW")) + bits = LOGD_PLATFORM; + + else { + for (diter = &domain_descs[0]; diter->name; diter++) { + if (!g_ascii_strcasecmp (diter->name, *iter)) { + bits = diter->num; + break; } + } + } - if (unrecognized) - g_string_append (unrecognized, ", "); - else - unrecognized = g_string_new (NULL); - g_string_append (unrecognized, *iter); - continue; + if (!bits) { + if (!bad_domains) { + g_set_error (error, NM_LOGGING_ERROR, NM_LOGGING_ERROR_UNKNOWN_DOMAIN, + _("Unknown log domain '%s'"), *iter); + return FALSE; } - for (i = 0; i < domain_log_level; i++) - new_logging[i] &= ~bits; - for (i = domain_log_level; i < LOGL_MAX; i++) - new_logging[i] |= bits; + if (unrecognized) + g_string_append (unrecognized, ", "); + else + unrecognized = g_string_new (NULL); + g_string_append (unrecognized, *iter); + continue; } - g_strfreev (tmp); - if (log_domains != (char *)domains) { - g_free (log_domains); - log_domains = g_strdup (domains); - } + for (i = 0; i < domain_log_level; i++) + new_logging[i] &= ~bits; + for (i = domain_log_level; i < LOGL_MAX; i++) + new_logging[i] |= bits; + } + g_strfreev (tmp); - for (i = 0; i < LOGL_MAX; i++) - logging[i] = new_logging[i]; + if (log_domains != (char *)domains) { + g_free (log_domains); + log_domains = g_strdup (domains); } log_level = new_log_level; + for (i = 0; i < LOGL_MAX; i++) + logging[i] = new_logging[i]; if (unrecognized) *bad_domains = g_string_free (unrecognized, FALSE); |