mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
Add method for checking if a string is (probably) a log message
When reading log output from QEMU/LXC we need to skip over any libvirt log messages. Currently the QEMU driver checks for a fixed string, but this is better done with a regex. Add a method virLogProbablyLogMessage to do a regex check Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
58e0accd8a
commit
f3d312f6c8
@ -1429,6 +1429,7 @@ virLogMessage;
|
|||||||
virLogParseDefaultPriority;
|
virLogParseDefaultPriority;
|
||||||
virLogParseFilters;
|
virLogParseFilters;
|
||||||
virLogParseOutputs;
|
virLogParseOutputs;
|
||||||
|
virLogProbablyLogMessage;
|
||||||
virLogReset;
|
virLogReset;
|
||||||
virLogSetBufferSize;
|
virLogSetBufferSize;
|
||||||
virLogSetDefaultPriority;
|
virLogSetDefaultPriority;
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
#include <regex.h>
|
||||||
#if HAVE_SYSLOG_H
|
#if HAVE_SYSLOG_H
|
||||||
# include <syslog.h>
|
# include <syslog.h>
|
||||||
#endif
|
#endif
|
||||||
@ -75,6 +76,17 @@ static char *virLogBuffer = NULL;
|
|||||||
static int virLogLen = 0;
|
static int virLogLen = 0;
|
||||||
static int virLogStart = 0;
|
static int virLogStart = 0;
|
||||||
static int virLogEnd = 0;
|
static int virLogEnd = 0;
|
||||||
|
static regex_t *virLogRegex = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
#define VIR_LOG_DATE_REGEX "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"
|
||||||
|
#define VIR_LOG_TIME_REGEX "[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]+[0-9][0-9][0-9][0-9]"
|
||||||
|
#define VIR_LOG_PID_REGEX "[0-9]+"
|
||||||
|
#define VIR_LOG_LEVEL_REGEX "debug|info|warning|error"
|
||||||
|
|
||||||
|
#define VIR_LOG_REGEX \
|
||||||
|
VIR_LOG_DATE_REGEX " " VIR_LOG_TIME_REGEX ": " \
|
||||||
|
VIR_LOG_PID_REGEX ": " VIR_LOG_LEVEL_REGEX " : "
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Filters are used to refine the rules on what to keep or drop
|
* Filters are used to refine the rules on what to keep or drop
|
||||||
@ -209,6 +221,12 @@ virLogOnceInit(void)
|
|||||||
virLogStart = 0;
|
virLogStart = 0;
|
||||||
virLogEnd = 0;
|
virLogEnd = 0;
|
||||||
virLogDefaultPriority = VIR_LOG_DEFAULT;
|
virLogDefaultPriority = VIR_LOG_DEFAULT;
|
||||||
|
|
||||||
|
if (VIR_ALLOC(virLogRegex) >= 0) {
|
||||||
|
if (regcomp(virLogRegex, VIR_LOG_REGEX, REG_EXTENDED) != 0)
|
||||||
|
VIR_FREE(virLogRegex);
|
||||||
|
}
|
||||||
|
|
||||||
virLogUnlock();
|
virLogUnlock();
|
||||||
if (pbm)
|
if (pbm)
|
||||||
VIR_WARN("%s", pbm);
|
VIR_WARN("%s", pbm);
|
||||||
@ -1587,3 +1605,19 @@ virLogSetFromEnv(void)
|
|||||||
if (debugEnv && *debugEnv)
|
if (debugEnv && *debugEnv)
|
||||||
virLogParseOutputs(debugEnv);
|
virLogParseOutputs(debugEnv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a true value if the first line in @str is
|
||||||
|
* probably a log message generated by the libvirt
|
||||||
|
* logging layer
|
||||||
|
*/
|
||||||
|
bool virLogProbablyLogMessage(const char *str)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
if (!virLogRegex)
|
||||||
|
return false;
|
||||||
|
if (regexec(virLogRegex, str, 0, NULL, 0) == 0)
|
||||||
|
ret = true;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -188,4 +188,7 @@ extern void virLogVMessage(virLogSource src,
|
|||||||
va_list vargs) ATTRIBUTE_FMT_PRINTF(7, 0);
|
va_list vargs) ATTRIBUTE_FMT_PRINTF(7, 0);
|
||||||
extern int virLogSetBufferSize(int size);
|
extern int virLogSetBufferSize(int size);
|
||||||
extern void virLogEmergencyDumpAll(int signum);
|
extern void virLogEmergencyDumpAll(int signum);
|
||||||
|
|
||||||
|
bool virLogProbablyLogMessage(const char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user