On Tue, Nov 23, 2010 at 07:53:53PM +0100, Matthias Bolte wrote:
This reverts commit
Log all errors at level INFO to stop polluting syslog
04bd0360f32ec628ecf7943b3fd1468d6eb2dde5.
and makes virRaiseErrorFull() only log errors when not inside
libvirtd. This stops libvirtd from polluting it's own log with
client errors that'll be reported and logged on the client
side anyway.
This removes logging of the errors entirely on the
server side which is not desirable for debugging.
We need to keep the logging, but at the low level.
diff --git a/src/util/logging.h b/src/util/logging.h
index 574f68d..ef78e97 100644
--- a/src/util/logging.h
+++ b/src/util/logging.h
@@ -22,6 +22,8 @@
#ifndef __VIRTLOG_H_
# define __VIRTLOG_H_
+# include <stdbool.h>
+
# include "internal.h"
# include "buf.h"
@@ -139,5 +141,7 @@ extern int virLogParseOutputs(const char *output);
extern void virLogMessage(const char *category, int priority,
const char *funcname, long long linenr, int flags,
const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(6, 7);
+extern bool virLogGetDaemonMode(void);
+extern void virLogSetDaemonMode(bool daemonMode);
These don't make sense to me.
diff --git a/src/util/virterror.c b/src/util/virterror.c
index 83c4c9d..14d92fd 100644
--- a/src/util/virterror.c
+++ b/src/util/virterror.c
@@ -64,6 +64,18 @@ void *virUserData = NULL; /* associated data */
}} \
}
+static virLogPriority virErrorLevelPriority(virErrorLevel level) {
+ switch (level) {
+ case VIR_ERR_NONE:
+ return(VIR_LOG_INFO);
+ case VIR_ERR_WARNING:
+ return(VIR_LOG_WARN);
+ case VIR_ERR_ERROR:
+ return(VIR_LOG_ERROR);
+ }
+ return(VIR_LOG_ERROR);
+}
+
static const char *virErrorDomainName(virErrorDomain domain) {
const char *dom = "unknown";
switch (domain) {
@@ -703,9 +715,15 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED,
/*
* Hook up the error or warning to the logging facility
* XXXX should we include filename as 'category' instead of domain name ?
+ *
+ * When inside libvirtd don't log errors, this would pollute the syslog
+ * with client errors. Those will get reported and logged on the client
+ * side anyway.
*/
- virLogMessage(virErrorDomainName(domain), VIR_LOG_INFO,
- funcname, linenr, 1, "%s", str);
+ if (!virLogGetDaemonMode()) {
+ virLogMessage(virErrorDomainName(domain), virErrorLevelPriority(level),
+ funcname, linenr, 1, "%s", str);
+ }
/*
* Save the information about the error
We should have a funtion in virterror.c
static logLevel = -1;
virErrorSetLogPriority(int level) {
logLevel = level;
}
...
prio = logLevel == -1 ? virErrorLevelPriority(level) : logLevel;
virLogMessage(virErrorDomain(domain), prio, funcname, linenr, 1, "%s", stR);
so that errors are always logged, simply at varying levels
Daniel