提交 b8786c06 编写于 作者: D Daniel P. Berrange

Filter out certain expected error messages from libvirtd

Add a hook to the error reporting APIs to allow specific
error messages to be filtered out. Wire up libvirtd to
remove VIR_ERR_NO_DOMAIN & similar error codes from the
logs. They are still logged at DEBUG level.

* daemon/libvirtd.c: Filter VIR_ERR_NO_DOMAIN and friends
* src/libvirt_private.syms, src/util/virterror.c,
  src/util/virterror_internal.h: Hook for changing error
  reporting level
上级 dbfca3ff
...@@ -825,6 +825,30 @@ static void virshErrorHandler(void *opaque ATTRIBUTE_UNUSED, virErrorPtr err ATT ...@@ -825,6 +825,30 @@ static void virshErrorHandler(void *opaque ATTRIBUTE_UNUSED, virErrorPtr err ATT
* took care of reporting the error */ * took care of reporting the error */
} }
static int daemonErrorLogFilter(virErrorPtr err, int priority)
{
/* These error codes don't really reflect real errors. They
* are expected events that occur when an app tries to check
* whether a particular guest already exists. This filters
* them to a lower log level to prevent pollution of syslog
*/
switch (err->code) {
case VIR_ERR_NO_DOMAIN:
case VIR_ERR_NO_NETWORK:
case VIR_ERR_NO_STORAGE_POOL:
case VIR_ERR_NO_STORAGE_VOL:
case VIR_ERR_NO_NODE_DEVICE:
case VIR_ERR_NO_INTERFACE:
case VIR_ERR_NO_NWFILTER:
case VIR_ERR_NO_SECRET:
case VIR_ERR_NO_DOMAIN_SNAPSHOT:
return VIR_LOG_DEBUG;
}
return priority;
}
static struct qemud_server *qemudInitialize(void) { static struct qemud_server *qemudInitialize(void) {
struct qemud_server *server; struct qemud_server *server;
...@@ -3258,6 +3282,7 @@ int main(int argc, char **argv) { ...@@ -3258,6 +3282,7 @@ int main(int argc, char **argv) {
/* Disable error func, now logging is setup */ /* Disable error func, now logging is setup */
virSetErrorFunc(NULL, virshErrorHandler); virSetErrorFunc(NULL, virshErrorHandler);
virSetErrorLogPriorityFunc(daemonErrorLogFilter);
/* /*
* Call the daemon startup hook * Call the daemon startup hook
......
...@@ -923,6 +923,7 @@ virReportErrorHelper; ...@@ -923,6 +923,7 @@ virReportErrorHelper;
virReportOOMErrorFull; virReportOOMErrorFull;
virReportSystemErrorFull; virReportSystemErrorFull;
virSetError; virSetError;
virSetErrorLogPriorityFunc;
virStrerror; virStrerror;
......
...@@ -26,6 +26,7 @@ virThreadLocal virLastErr; ...@@ -26,6 +26,7 @@ virThreadLocal virLastErr;
virErrorFunc virErrorHandler = NULL; /* global error handler */ virErrorFunc virErrorHandler = NULL; /* global error handler */
void *virUserData = NULL; /* associated data */ void *virUserData = NULL; /* associated data */
virErrorLogPriorityFunc virErrorLogPriorityFilter = NULL;
/* /*
* Macro used to format the message as a string in virRaiseError * Macro used to format the message as a string in virRaiseError
...@@ -721,14 +722,6 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -721,14 +722,6 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED,
VIR_GET_VAR_STR(fmt, str); 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 ?
*/
priority = virErrorLevelPriority(level);
virLogMessage(virErrorDomainName(domain), priority,
funcname, linenr, 1, "%s", str);
/* /*
* Save the information about the error * Save the information about the error
*/ */
...@@ -749,6 +742,18 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -749,6 +742,18 @@ virRaiseErrorFull(virConnectPtr conn ATTRIBUTE_UNUSED,
to->int1 = int1; to->int1 = int1;
to->int2 = int2; to->int2 = int2;
/*
* Hook up the error or warning to the logging facility
* XXXX should we include filename as 'category' instead of domain name ?
*/
priority = virErrorLevelPriority(level);
if (virErrorLogPriorityFilter)
priority = virErrorLogPriorityFilter(to, priority);
virLogMessage(filename, priority,
funcname, linenr,
virErrorLogPriorityFilter ? 0 : 1,
"%s", str);
errno = save_errno; errno = save_errno;
} }
...@@ -1335,3 +1340,8 @@ void virReportOOMErrorFull(int domcode, ...@@ -1335,3 +1340,8 @@ void virReportOOMErrorFull(int domcode,
domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR, domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
virerr, NULL, NULL, -1, -1, virerr, NULL); virerr, NULL, NULL, -1, -1, virerr, NULL);
} }
void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func)
{
virErrorLogPriorityFilter = func;
}
...@@ -90,4 +90,7 @@ int virSetError(virErrorPtr newerr); ...@@ -90,4 +90,7 @@ int virSetError(virErrorPtr newerr);
void virDispatchError(virConnectPtr conn); void virDispatchError(virConnectPtr conn);
const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen);
typedef int (*virErrorLogPriorityFunc)(virErrorPtr, int);
void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func);
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册