libnm: rework and document LIBNM_CLIENT_DEBUG
Document LIBNM_CLIENT_DEBUG under nm_utils_print(). Also, add an alias "warn" for "warning" flag. Also, no longer special treat "error" and "warning" flags to indicate printing via g_criticial()/g_warning(). Previously, you could get assertions via $ G_DEBUG=fatal-warnings LIBNM_CLIENT_DEBUG=error,warning,trace nmcli or you could enable all messages (including <error>/<warn> level) without assertions via $ G_DEBUG=fatal-warnings LIBNM_CLIENT_DEBUG=trace nmcli However, it was not possible to enable only <error>/<warn> levels without those assertions. Now, "error"/"warn"/"warning" behave just like "debug"/"trace" to enable message up to the specified level. It only implies printing to stderr (or stdout or file, depending on "stdout" flag and LIBNM_CLIENT_DEBUG_FILE). Now, to enable redirect to g_warning()/g_error() use the new keywords "ERROR"/"WARN"/"WARNING". For testing, we probably want to enable such assertions. So to be mostly backward compatible, we can run with $ G_DEBUG=fatal-warnings LIBNM_CLIENT_DEBUG=error,warning,WARN nmcli with that, the "error","warning" flags are redundant on newer libnm and the WARN is ignored on older libnm.
This commit is contained in:
@@ -30,8 +30,12 @@ _nml_dbus_log_level_init(void)
|
|||||||
const GDebugKey keys[] = {
|
const GDebugKey keys[] = {
|
||||||
{"trace", _NML_DBUS_LOG_LEVEL_TRACE},
|
{"trace", _NML_DBUS_LOG_LEVEL_TRACE},
|
||||||
{"debug", _NML_DBUS_LOG_LEVEL_DEBUG},
|
{"debug", _NML_DBUS_LOG_LEVEL_DEBUG},
|
||||||
|
{"warn", _NML_DBUS_LOG_LEVEL_WARN},
|
||||||
{"warning", _NML_DBUS_LOG_LEVEL_WARN},
|
{"warning", _NML_DBUS_LOG_LEVEL_WARN},
|
||||||
{"error", _NML_DBUS_LOG_LEVEL_ERROR},
|
{"error", _NML_DBUS_LOG_LEVEL_ERROR},
|
||||||
|
{"WARN", _NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_ASSERT},
|
||||||
|
{"WARNING", _NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_ASSERT},
|
||||||
|
{"ERROR", _NML_DBUS_LOG_LEVEL_ERROR | NML_DBUS_LOG_ASSERT},
|
||||||
{"stdout", NML_DBUS_LOG_STDOUT},
|
{"stdout", NML_DBUS_LOG_STDOUT},
|
||||||
};
|
};
|
||||||
int l;
|
int l;
|
||||||
@@ -167,21 +171,17 @@ _nml_dbus_log(NMLDBusLogLevel level, gboolean use_stdout, const char *fmt, ...)
|
|||||||
break;
|
break;
|
||||||
case NML_DBUS_LOG_LEVEL_WARN:
|
case NML_DBUS_LOG_LEVEL_WARN:
|
||||||
prefix = "<warn > ";
|
prefix = "<warn > ";
|
||||||
if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_WARN)) {
|
if (NM_FLAGS_HAS(configured_log_level, NML_DBUS_LOG_ASSERT)) {
|
||||||
g_warning("libnm-dbus: %s%s", prefix, msg);
|
g_warning("libnm-dbus: %s%s", prefix, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NML_DBUS_LOG_LEVEL_ERROR:
|
case NML_DBUS_LOG_LEVEL_ERROR:
|
||||||
prefix = "<error> ";
|
prefix = "<error> ";
|
||||||
if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_ERROR)) {
|
if (NM_FLAGS_HAS(configured_log_level, NML_DBUS_LOG_ASSERT)) {
|
||||||
g_critical("libnm-dbus: %s%s", prefix, msg);
|
g_critical("libnm-dbus: %s%s", prefix, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (NM_FLAGS_HAS(configured_log_level, _NML_DBUS_LOG_LEVEL_WARN)) {
|
|
||||||
g_warning("libnm-dbus: %s%s", prefix, msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -987,10 +987,26 @@ nm_utils_g_param_spec_is_default(const GParamSpec *pspec)
|
|||||||
* with these functions (it implements additional buffering). By
|
* with these functions (it implements additional buffering). By
|
||||||
* using nm_utils_print(), the same logging mechanisms can be used.
|
* using nm_utils_print(), the same logging mechanisms can be used.
|
||||||
*
|
*
|
||||||
* Also, libnm honors LIBNM_CLIENT_DEBUG_FILE environment. If this
|
* LIBNM_CLIENT_DEBUG is a list of keywords separated by commas. The keyword
|
||||||
* is set to a filename pattern (accepting "%p" for the process ID),
|
* "trace" enables printing messages of the lowest up to the highest severity.
|
||||||
* then the debug log is written to that file instead. With @output_mode
|
* Likewise, the severities "debug", "warn" ("warning") and "error" are honored
|
||||||
* zero, the same location will be written. Since: 1.44.
|
* in similar way. Setting the flags "ERROR" or "WARN" ("WARNING") implies that
|
||||||
|
* respective levels are enabled, but also are ERROR messages printed with
|
||||||
|
* g_critical() and WARN messages with g_warning(). Together with G_DEBUG="fatal-warnings"
|
||||||
|
* or G_DEBUG="fatal-critical" this can be used to abort the program on errors.
|
||||||
|
* Note that all <error> messages imply an unexpected data on the D-Bus API
|
||||||
|
* (due to a bug). <warn> also implies unexepected data, but that can happen
|
||||||
|
* when using different versions of libnm and daemon. For testing, it is
|
||||||
|
* good to turn these into assertions.
|
||||||
|
*
|
||||||
|
* By default, messages are printed to stderr, unless LIBNM_CLIENT_DEBUG
|
||||||
|
* contains "stdout" flag. Also, libnm honors LIBNM_CLIENT_DEBUG_FILE
|
||||||
|
* environment. If this is set to a filename pattern (accepting "%%p" for the
|
||||||
|
* process ID), then the debug log is written to that file instead of
|
||||||
|
* stderr/stdout. With @output_mode zero, the same location will be written.
|
||||||
|
*
|
||||||
|
* LIBNM_CLIENT_DEBUG_FILE is supported since 1.44. "ERROR", "WARN" and "WARNING"
|
||||||
|
* are supported since 1.46.
|
||||||
*
|
*
|
||||||
* Since: 1.30
|
* Since: 1.30
|
||||||
*/
|
*/
|
||||||
|
@@ -31,13 +31,14 @@ typedef enum {
|
|||||||
_NML_DBUS_LOG_LEVEL_DEBUG = 0x04,
|
_NML_DBUS_LOG_LEVEL_DEBUG = 0x04,
|
||||||
|
|
||||||
/* the difference between a warning and a critical is that it results in
|
/* the difference between a warning and a critical is that it results in
|
||||||
* g_warning() vs. g_critical() messages. Note that we want to use "warnings"
|
* g_warning() vs. g_critical() messages (with NML_DBUS_LOG_ASSERT). Note
|
||||||
* for unknown D-Bus API that could just result because we run against a
|
* that we want to use "warnings" for unknown D-Bus API that could just
|
||||||
* newer NetworkManager version (such warnings are more graceful, because
|
* result because we run against a newer NetworkManager version (such
|
||||||
* we want that libnm can be forward compatible against newer servers).
|
* warnings are more graceful, because we want that libnm can be forward
|
||||||
* Critical warnings should be emitted when NetworkManager exposes something
|
* compatible against newer servers). Critical warnings should be emitted
|
||||||
* on D-Bus that breaks the current expectations. Usually NetworkManager
|
* when NetworkManager exposes something on D-Bus that breaks the current
|
||||||
* should not break API, hence such issues are more severe. */
|
* expectations. Usually NetworkManager should not break API, hence such
|
||||||
|
* issues are more severe. */
|
||||||
_NML_DBUS_LOG_LEVEL_WARN = 0x08,
|
_NML_DBUS_LOG_LEVEL_WARN = 0x08,
|
||||||
_NML_DBUS_LOG_LEVEL_ERROR = 0x10,
|
_NML_DBUS_LOG_LEVEL_ERROR = 0x10,
|
||||||
|
|
||||||
@@ -51,6 +52,8 @@ typedef enum {
|
|||||||
NML_DBUS_LOG_LEVEL_ERROR = _NML_DBUS_LOG_LEVEL_ERROR | NML_DBUS_LOG_LEVEL_WARN,
|
NML_DBUS_LOG_LEVEL_ERROR = _NML_DBUS_LOG_LEVEL_ERROR | NML_DBUS_LOG_LEVEL_WARN,
|
||||||
|
|
||||||
NML_DBUS_LOG_STDOUT = 0x20,
|
NML_DBUS_LOG_STDOUT = 0x20,
|
||||||
|
|
||||||
|
NML_DBUS_LOG_ASSERT = 0x40,
|
||||||
} NMLDBusLogLevel;
|
} NMLDBusLogLevel;
|
||||||
|
|
||||||
#undef _LOGL_TRACE
|
#undef _LOGL_TRACE
|
||||||
@@ -88,8 +91,11 @@ nml_dbus_log_enabled_full(NMLDBusLogLevel level, gboolean *out_use_stdout)
|
|||||||
|
|
||||||
nm_assert(l & _NML_DBUS_LOG_LEVEL_INITIALIZED);
|
nm_assert(l & _NML_DBUS_LOG_LEVEL_INITIALIZED);
|
||||||
NM_SET_OUT(out_use_stdout, NM_FLAGS_HAS(l, NML_DBUS_LOG_STDOUT));
|
NM_SET_OUT(out_use_stdout, NM_FLAGS_HAS(l, NML_DBUS_LOG_STDOUT));
|
||||||
if (level == NML_DBUS_LOG_LEVEL_ANY)
|
if (level == NML_DBUS_LOG_LEVEL_ANY) {
|
||||||
return l != _NML_DBUS_LOG_LEVEL_INITIALIZED;
|
return NM_FLAGS_ANY(l,
|
||||||
|
NML_DBUS_LOG_LEVEL_TRACE | NML_DBUS_LOG_LEVEL_DEBUG
|
||||||
|
| NML_DBUS_LOG_LEVEL_WARN | NML_DBUS_LOG_LEVEL_ERROR);
|
||||||
|
}
|
||||||
return !!(((NMLDBusLogLevel) l) & level);
|
return !!(((NMLDBusLogLevel) l) & level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user