[libvirt] [PATCH] Don't log client errors in libvirtd
Daniel P. Berrange
berrange at redhat.com
Tue Nov 23 19:25:53 UTC 2010
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
More information about the libvir-list
mailing list