Don't convert high priority levels to the debug level. Don't parse LIBVIRT_LOG_FILTERS and LIBVIRT_LOG_OUTPUTS when they're set to the empty string. Warn when the user specifies an invalid value (empty string remains a noop). --- src/libvirt.c | 13 ++++++++----- src/logging.c | 52 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/libvirt.c b/src/libvirt.c index 61a9b7c..9e96410 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -274,21 +274,24 @@ virInitialize(void) return -1; debugEnv = getenv("LIBVIRT_DEBUG"); - if (debugEnv && *debugEnv && *debugEnv != '0') { - if (STREQ(debugEnv, "2") || STREQ(debugEnv, "info")) + if (debugEnv && *debugEnv) { + if (STREQ(debugEnv, "1") || STREQ(debugEnv, "debug")) + virLogSetDefaultPriority(VIR_LOG_DEBUG); + else if (STREQ(debugEnv, "2") || STREQ(debugEnv, "info")) virLogSetDefaultPriority(VIR_LOG_INFO); else if (STREQ(debugEnv, "3") || STREQ(debugEnv, "warning")) virLogSetDefaultPriority(VIR_LOG_WARN); else if (STREQ(debugEnv, "4") || STREQ(debugEnv, "error")) virLogSetDefaultPriority(VIR_LOG_ERROR); else - virLogSetDefaultPriority(VIR_LOG_DEBUG); + VIR_WARN0(_("Ignoring invalid log level setting.")); } debugEnv = getenv("LIBVIRT_LOG_FILTERS"); - if (debugEnv) + if (debugEnv && *debugEnv) virLogParseFilters(debugEnv); + debugEnv = getenv("LIBVIRT_LOG_OUTPUTS"); - if (debugEnv) + if (debugEnv && *debugEnv) virLogParseOutputs(debugEnv); DEBUG0("register drivers"); diff --git a/src/logging.c b/src/logging.c index 46a4f9f..27d6e4b 100644 --- a/src/logging.c +++ b/src/logging.c @@ -314,8 +314,10 @@ error: * Returns 0 if successful, -1 in case of error. */ int virLogSetDefaultPriority(int priority) { - if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR)) + if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR)) { + VIR_WARN0(_("Ignoring invalid log level setting.")); return(-1); + } if (!virLogInitialized) virLogStartup(); virLogDefaultPriority = priority; @@ -681,7 +683,8 @@ int virLogParseOutputs(const char *outputs) { const char *cur = outputs, *str; char *name; int prio; - int ret = 0; + int ret = -1; + int count = 0; if (cur == NULL) return(-1); @@ -690,53 +693,57 @@ int virLogParseOutputs(const char *outputs) { while (*cur != 0) { prio= virParseNumber(&cur); if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) - return(-1); + goto cleanup; if (*cur != ':') - return(-1); + goto cleanup; cur++; if (STREQLEN(cur, "stderr", 6)) { cur += 6; if (virLogAddOutputToStderr(prio) == 0) - ret++; + count++; } else if (STREQLEN(cur, "syslog", 6)) { cur += 6; if (*cur != ':') - return(-1); + goto cleanup; cur++; str = cur; while ((*cur != 0) && (!IS_SPACE(cur))) cur++; if (str == cur) - return(-1); + goto cleanup; #if HAVE_SYSLOG_H name = strndup(str, cur - str); if (name == NULL) - return(-1); + goto cleanup; if (virLogAddOutputToSyslog(prio, name) == 0) - ret++; + count++; VIR_FREE(name); #endif /* HAVE_SYSLOG_H */ } else if (STREQLEN(cur, "file", 4)) { cur += 4; if (*cur != ':') - return(-1); + goto cleanup; cur++; str = cur; while ((*cur != 0) && (!IS_SPACE(cur))) cur++; if (str == cur) - return(-1); + goto cleanup; name = strndup(str, cur - str); if (name == NULL) - return(-1); + goto cleanup; if (virLogAddOutputToFile(prio, name) == 0) - ret++; + count++; VIR_FREE(name); } else { - return(-1); + goto cleanup; } virSkipSpaces(&cur); } + ret = count; +cleanup: + if (ret == -1) + VIR_WARN0(_("Ignoring invalid log output setting.")); return(ret); } @@ -762,7 +769,8 @@ int virLogParseFilters(const char *filters) { const char *cur = filters, *str; char *name; int prio; - int ret = 0; + int ret = -1; + int count = 0; if (cur == NULL) return(-1); @@ -771,22 +779,26 @@ int virLogParseFilters(const char *filters) { while (*cur != 0) { prio= virParseNumber(&cur); if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR)) - return(-1); + goto cleanup; if (*cur != ':') - return(-1); + goto cleanup; cur++; str = cur; while ((*cur != 0) && (!IS_SPACE(cur))) cur++; if (str == cur) - return(-1); + goto cleanup; name = strndup(str, cur - str); if (name == NULL) - return(-1); + goto cleanup; if (virLogDefineFilter(name, prio, 0) >= 0) - ret++; + count++; VIR_FREE(name); virSkipSpaces(&cur); } + ret = count; +cleanup: + if (ret == -1) + VIR_WARN0(_("Ignoring invalid log filter setting.")); return(ret); } -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list