diff options
author | Thomas Haller <thaller@redhat.com> | 2015-10-07 10:45:28 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-10-09 14:55:00 +0200 |
commit | fd87ce503c7927ba552b381b5c2d4b32fccb48dd (patch) | |
tree | e2a3390bf6034b5c01d26c84a8c42b7334a5205e | |
parent | cc6b07c43974bc83b2bc17dce5bbe5934149fb58 (diff) | |
download | NetworkManager-fd87ce503c7927ba552b381b5c2d4b32fccb48dd.tar.gz |
logging: add special logging level "KEEP"
Without this, the user cannot configure only certain logging domains
without touching them all.
E.g.
# nmcli general logging level DEBUG domains PLATFORM
will disable all non-PLATFORM domains.
Well, the user can do:
# nmcli general logging level INFO domains PLATFORM:DEBUG
# nmcli general logging level DEBUG domains ALL:INFO,PLATFORM
but in this case all non-PLATFORM domains are reset explicitly.
Now the user can:
# nmcli general logging level KEEP domains PLATFORM:DEBUG
# nmcli general logging level DEBUG domains ALL:KEEP,PLATFORM
which will only change the platform domain.
-rw-r--r-- | introspection/nm-manager.xml | 8 | ||||
-rw-r--r-- | src/nm-logging.c | 21 | ||||
-rw-r--r-- | src/nm-logging.h | 1 |
3 files changed, 24 insertions, 6 deletions
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml index 88f477d62f..36cbee3011 100644 --- a/introspection/nm-manager.xml +++ b/introspection/nm-manager.xml @@ -184,7 +184,13 @@ </tp:docstring> <arg name="level" type="s" direction="in"> <tp:docstring> - One of [ERR, WARN, INFO, DEBUG, TRACE]. + One of [ERR, WARN, INFO, DEBUG, TRACE, OFF, KEEP]. + This level is applied to the domains as specified in the domains + argument. Except for the special level "KEEP", all unmentioned + domains are disabled entirely. "KEEP" is special and allows + not to change the current setting except for the specified + domains. E.g. level=KEEP and domains=PLATFORM:DEBUG will only + touch the platform domain. </tp:docstring> </arg> <arg name="domains" type="s" direction="in"> diff --git a/src/nm-logging.c b/src/nm-logging.c index 30c754d163..e58a5de384 100644 --- a/src/nm-logging.c +++ b/src/nm-logging.c @@ -79,6 +79,7 @@ static const LogLevelDesc level_desc[_LOGL_N] = { [LOGL_WARN] = { "WARN", "<warn>", LOG_WARNING, G_LOG_LEVEL_WARNING, FALSE }, [LOGL_ERR] = { "ERR", "<error>", LOG_ERR, G_LOG_LEVEL_WARNING, TRUE }, [_LOGL_OFF] = { "OFF", NULL, 0, 0, FALSE }, + [_LOGL_KEEP] = { "KEEP", NULL, 0, 0, FALSE }, }; static const LogDesc domain_descs[] = { @@ -181,6 +182,11 @@ nm_logging_setup (const char *level, if (level && *level) { if (!match_log_level (level, &new_log_level, error)) return FALSE; + if (new_log_level == _LOGL_KEEP) { + new_log_level = log_level; + for (i = 0; i < G_N_ELEMENTS (new_logging); i++) + new_logging[i] = logging[i]; + } } /* domains */ @@ -249,11 +255,16 @@ nm_logging_setup (const char *level, } } - for (i = 0; i < G_N_ELEMENTS (new_logging); i++) { - if (i < domain_log_level) - new_logging[i] &= ~bits; - else - new_logging[i] |= bits; + if (domain_log_level == _LOGL_KEEP) { + for (i = 0; i < G_N_ELEMENTS (new_logging); i++) + new_logging[i] = (new_logging[i] & ~bits) | (logging[i] & bits); + } else { + for (i = 0; i < G_N_ELEMENTS (new_logging); i++) { + if (i < domain_log_level) + new_logging[i] &= ~bits; + else + new_logging[i] |= bits; + } } } g_strfreev (tmp); diff --git a/src/nm-logging.h b/src/nm-logging.h index db9f0b1557..b54078186e 100644 --- a/src/nm-logging.h +++ b/src/nm-logging.h @@ -94,6 +94,7 @@ typedef enum { /*< skip >*/ _LOGL_N_REAL, /* the number of actual logging levels */ _LOGL_OFF = _LOGL_N_REAL, /* special logging level that is always disabled. */ + _LOGL_KEEP, /* special logging level to indicate that the logging level should not be changed. */ _LOGL_N, /* the number of logging levels including "OFF" */ } NMLogLevel; |