mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-19 02:50:25 +03:00
Add a metadata parameter to virLog{, V}Message
... and update all users. No change in functionality, the parameter will be used later. The metadata representation is as minimal as possible, but requires the caller to allocate an array on stack explicitly. The alternative of using varargs in the virLogMessage() callers: * Would not allow the caller to optionally omit some metadata elements, except by having two calls to virLogMessage. * Would not be as type-safe (e.g. using int vs. size_t), and the compiler wouldn't be able to do type checking * Depending on parameter order: a) virLogMessage(..., message format, message params..., metadata..., NULL) can not be portably implemented (parse_printf_format() is a glibc function) b) virLogMessage(..., metadata..., NULL, message format, message params...) would prevent usage of ATTRIBUTE_FMT_PRINTF and the associated compiler checking. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
a4c19459aa
commit
c780e9b882
@ -729,6 +729,7 @@ virLogVersionString(const char **rawmsg,
|
||||
* @filename: file where the message was emitted
|
||||
* @linenr: line where the message was emitted
|
||||
* @funcname: the function emitting the (debug) message
|
||||
* @metadata: NULL or metadata array, terminated by an item with NULL key
|
||||
* @fmt: the string format
|
||||
* @...: the arguments
|
||||
*
|
||||
@ -741,13 +742,14 @@ virLogMessage(virLogSource source,
|
||||
const char *filename,
|
||||
int linenr,
|
||||
const char *funcname,
|
||||
virLogMetadataPtr metadata,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
virLogVMessage(source, priority,
|
||||
filename, linenr, funcname,
|
||||
fmt, ap);
|
||||
metadata, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@ -759,6 +761,7 @@ virLogMessage(virLogSource source,
|
||||
* @filename: file where the message was emitted
|
||||
* @linenr: line where the message was emitted
|
||||
* @funcname: the function emitting the (debug) message
|
||||
* @metadata: NULL or metadata array, terminated by an item with NULL key
|
||||
* @fmt: the string format
|
||||
* @vargs: format args
|
||||
*
|
||||
@ -771,6 +774,7 @@ virLogVMessage(virLogSource source,
|
||||
const char *filename,
|
||||
int linenr,
|
||||
const char *funcname,
|
||||
virLogMetadataPtr metadata ATTRIBUTE_UNUSED,
|
||||
const char *fmt,
|
||||
va_list vargs)
|
||||
{
|
||||
|
@ -61,7 +61,7 @@ typedef enum {
|
||||
*/
|
||||
# ifdef ENABLE_DEBUG
|
||||
# define VIR_DEBUG_INT(src, filename, linenr, funcname, ...) \
|
||||
virLogMessage(src, VIR_LOG_DEBUG, filename, linenr, funcname, __VA_ARGS__)
|
||||
virLogMessage(src, VIR_LOG_DEBUG, filename, linenr, funcname, NULL, __VA_ARGS__)
|
||||
# else
|
||||
/**
|
||||
* virLogEatParams:
|
||||
@ -78,11 +78,11 @@ static inline void virLogEatParams(virLogSource unused, ...)
|
||||
# endif /* !ENABLE_DEBUG */
|
||||
|
||||
# define VIR_INFO_INT(src, filename, linenr, funcname, ...) \
|
||||
virLogMessage(src, VIR_LOG_INFO, filename, linenr, funcname, __VA_ARGS__)
|
||||
virLogMessage(src, VIR_LOG_INFO, filename, linenr, funcname, NULL, __VA_ARGS__)
|
||||
# define VIR_WARN_INT(src, filename, linenr, funcname, ...) \
|
||||
virLogMessage(src, VIR_LOG_WARN, filename, linenr, funcname, __VA_ARGS__)
|
||||
virLogMessage(src, VIR_LOG_WARN, filename, linenr, funcname, NULL, __VA_ARGS__)
|
||||
# define VIR_ERROR_INT(src, filename, linenr, funcname, ...) \
|
||||
virLogMessage(src, VIR_LOG_ERROR, filename, linenr, funcname, __VA_ARGS__)
|
||||
virLogMessage(src, VIR_LOG_ERROR, filename, linenr, funcname, NULL, __VA_ARGS__)
|
||||
|
||||
# define VIR_DEBUG(...) \
|
||||
VIR_DEBUG_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__)
|
||||
@ -93,6 +93,16 @@ static inline void virLogEatParams(virLogSource unused, ...)
|
||||
# define VIR_ERROR(...) \
|
||||
VIR_ERROR_INT(VIR_LOG_FROM_FILE, __FILE__, __LINE__, __func__, __VA_ARGS__)
|
||||
|
||||
|
||||
struct _virLogMetadata {
|
||||
const char *key;
|
||||
const char *s; /* String value, or NULL to use "i" */
|
||||
int i;
|
||||
};
|
||||
|
||||
typedef struct _virLogMetadata virLogMetadata;
|
||||
typedef struct _virLogMetadata *virLogMetadataPtr;
|
||||
|
||||
/**
|
||||
* virLogOutputFunc:
|
||||
* @src: the src for the message
|
||||
@ -164,14 +174,16 @@ extern void virLogMessage(virLogSource src,
|
||||
const char *filename,
|
||||
int linenr,
|
||||
const char *funcname,
|
||||
const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(6, 7);
|
||||
virLogMetadataPtr metadata,
|
||||
const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(7, 8);
|
||||
extern void virLogVMessage(virLogSource src,
|
||||
virLogPriority priority,
|
||||
const char *filename,
|
||||
int linenr,
|
||||
const char *funcname,
|
||||
virLogMetadataPtr metadata,
|
||||
const char *fmt,
|
||||
va_list vargs) ATTRIBUTE_FMT_PRINTF(6, 0);
|
||||
va_list vargs) ATTRIBUTE_FMT_PRINTF(7, 0);
|
||||
extern int virLogSetBufferSize(int size);
|
||||
extern void virLogEmergencyDumpAll(int signum);
|
||||
#endif
|
||||
|
@ -106,11 +106,11 @@ void virAuditSend(const char *filename,
|
||||
if (success)
|
||||
virLogMessage(VIR_LOG_FROM_AUDIT, VIR_LOG_INFO,
|
||||
filename, linenr, funcname,
|
||||
"success=yes %s", str);
|
||||
NULL, "success=yes %s", str);
|
||||
else
|
||||
virLogMessage(VIR_LOG_FROM_AUDIT, VIR_LOG_WARN,
|
||||
filename, linenr, funcname,
|
||||
"success=no %s", str);
|
||||
NULL, "success=no %s", str);
|
||||
}
|
||||
|
||||
#if HAVE_AUDIT
|
||||
|
@ -679,7 +679,7 @@ virRaiseErrorFull(const char *filename ATTRIBUTE_UNUSED,
|
||||
virLogMessage(virErrorLogPriorityFilter ? VIR_LOG_FROM_FILE : VIR_LOG_FROM_ERROR,
|
||||
priority,
|
||||
filename, linenr, funcname,
|
||||
"%s", str);
|
||||
NULL, "%s", str);
|
||||
|
||||
errno = save_errno;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user