2010/11/30 Daniel Veillard <veillard@xxxxxxxxxx>: > On Tue, Nov 30, 2010 at 03:22:59PM +0100, Matthias Bolte wrote: >> This reverts commit >> >> ÂLog all errors at level INFO to stop polluting syslog >> Â04bd0360f32ec628ecf7943b3fd1468d6eb2dde5. >> >> and makes virRaiseErrorFull() log errors at debug priority >> when called from inside libvirtd. This stops libvirtd from >> polluting it's own log with client errors at error priority >> that'll be reported and logged on the client side anyway. >> --- >> >> This is basically a v2 for >> >> https://www.redhat.com/archives/libvir-list/2010-November/msg01060.html >> >> v2 logs client error at debug priority in libvirtd instead of >> not logging them at all. Also the way it's implemented is >> changed the way that Daniel suggested. >> >> Âdaemon/libvirtd.c       |  Â4 ++++ >> Âsrc/libvirt_private.syms   Â|  Â1 + >> Âsrc/util/virterror.c     Â|  28 +++++++++++++++++++++++++++- >> Âsrc/util/virterror_internal.h |  Â1 + >> Â4 files changed, 33 insertions(+), 1 deletions(-) >> >> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c >> index 66f1388..caf51bf 100644 >> --- a/daemon/libvirtd.c >> +++ b/daemon/libvirtd.c >> @@ -3083,6 +3083,10 @@ int main(int argc, char **argv) { >>     Âexit(EXIT_FAILURE); >>   Â} >> >> +  Â/* Set error logging priority to debug, so client errors don't >> +   * show up as errors in the daemon log */ >> +  ÂvirErrorSetLogPriority(VIR_LOG_DEBUG); >> + >>   Âwhile (1) { >>     Âint optidx = 0; >>     Âint c; >> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >> index 33e52e2..ef33f86 100644 >> --- a/src/libvirt_private.syms >> +++ b/src/libvirt_private.syms >> @@ -831,6 +831,7 @@ virAuditSend; >> Â# virterror_internal.h >> ÂvirDispatchError; >> ÂvirErrorMsg; >> +virErrorSetLogPriority; >> ÂvirRaiseErrorFull; >> ÂvirReportErrorHelper; >> ÂvirReportOOMErrorFull; >> diff --git a/src/util/virterror.c b/src/util/virterror.c >> index 83c4c9d..491da23 100644 >> --- a/src/util/virterror.c >> +++ b/src/util/virterror.c >> @@ -26,6 +26,7 @@ virThreadLocal virLastErr; >> >> ÂvirErrorFunc virErrorHandler = NULL;   /* global error handler */ >> Âvoid *virUserData = NULL;    Â/* associated data */ >> +static int virErrorLogPriority = -1; >> >> Â/* >>  * Macro used to format the message as a string in virRaiseError >> @@ -64,6 +65,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) { >> @@ -676,6 +689,7 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED, >> Â{ >>   ÂvirErrorPtr to; >>   Âchar *str; >> +  Âint priority; >> >>   Â/* >>    * All errors are recorded in thread local storage >> @@ -700,11 +714,18 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED, >>     ÂVIR_GET_VAR_STR(fmt, str); >>   Â} >> >> + >>   Â/* >>    * Hook up the error or warning to the logging facility >>    * XXXX should we include filename as 'category' instead of domain name ? >> +   * >> +   * When an explicit error log priority is set then use it, otherwise >> +   * translate the error level to the log priority. This is used by libvirtd >> +   * to log client errors at debug priority. >>    */ >> -  ÂvirLogMessage(virErrorDomainName(domain), VIR_LOG_INFO, >> +  Âpriority = virErrorLogPriority == -1 ? virErrorLevelPriority(level) >> +                     : virErrorLogPriority; >> +  ÂvirLogMessage(virErrorDomainName(domain), priority, >>          Âfuncname, linenr, 1, "%s", str); >> >>   Â/* >> @@ -1319,3 +1340,8 @@ void virReportOOMErrorFull(int domcode, >>            Âdomcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR, >>            Âvirerr, NULL, NULL, -1, -1, virerr, NULL); >> Â} >> + >> +void virErrorSetLogPriority(int priority) >> +{ >> +  ÂvirErrorLogPriority = priority; >> +} >> diff --git a/src/util/virterror_internal.h b/src/util/virterror_internal.h >> index 601a884..2dd2b4a 100644 >> --- a/src/util/virterror_internal.h >> +++ b/src/util/virterror_internal.h >> @@ -89,5 +89,6 @@ void virReportOOMErrorFull(int domcode, >> Âint virSetError(virErrorPtr newerr); >> Âvoid virDispatchError(virConnectPtr conn); >> Âconst char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); >> +void virErrorSetLogPriority(int priority); >> > > ÂACK, this seems to match what Dan suggested, yes > > Daniel > Thanks, pushed. Matthias -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list