[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 01/35] libxl: add LIBXL_LOGD_* and LOG*D function families.
From: Cedric Bosdonnat <cbosdonnat@xxxxxxxx> These functions should be used to log messages when the domain id is known. libxl__log will now prepend the log message by "Domain %PRIu32:" if the domain id is a valid one. This aims at helping consumers filter logs on domain IDs. Signed-off-by: Cédric Bosdonnat <cbosdonnat@xxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- v2: * use the domid from ao or its parent if any. * fix style * remove useless write of 0 at the end of snprintf result. --- tools/libxl/libxl_event.c | 10 +++++++--- tools/libxl/libxl_internal.c | 16 ++++++++++------ tools/libxl/libxl_internal.h | 38 +++++++++++++++++++++++++++++++------- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index 02b39e6..484f9ba 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -1362,7 +1362,7 @@ void libxl__event_disaster(libxl__egc *egc, const char *msg, int errnoval, { EGC_GC; - libxl__log(CTX, XTL_CRITICAL, errnoval, file, line, func, + libxl__log(CTX, XTL_CRITICAL, errnoval, file, line, func, INVALID_DOMID, "DISASTER in event loop: %s%s%s%s", msg, type ? " (relates to event type " : "", @@ -1943,7 +1943,7 @@ libxl__ao *libxl__ao_create(libxl_ctx *ctx, uint32_t domid, ao->poller = libxl__poller_get(&ao->gc); if (!ao->poller) goto out; } - libxl__log(ctx,XTL_DEBUG,-1,file,line,func, + libxl__log(ctx,XTL_DEBUG,-1,file,line,func,domid, "ao %p: create: how=%p callback=%p poller=%p", ao, how, ao->how.callback, ao->poller); @@ -1962,13 +1962,17 @@ int libxl__ao_inprogress(libxl__ao *ao, { AO_GC; int rc; + uint32_t domid = ao->domid; assert(ao->magic == LIBXL__AO_MAGIC); assert(ao->constructing); assert(ao->in_initiator); ao->constructing = 0; - libxl__log(CTX,XTL_DEBUG,-1,file,line,func, + if (ao->nested_root) + domid = ao->nested_root->domid; + + libxl__log(CTX,XTL_DEBUG,-1,file,line,func,domid, "ao %p: inprogress: poller=%p, flags=%s%s%s%s", ao, ao->poller, ao->constructing ? "o" : "", diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c index 448dd61..c270a24 100644 --- a/tools/libxl/libxl_internal.c +++ b/tools/libxl/libxl_internal.c @@ -22,7 +22,7 @@ void libxl__alloc_failed(libxl_ctx *ctx, const char *func, #define M "libxl: FATAL ERROR: memory allocation failure" #define L (size ? M " (%s, %lu x %lu)\n" : M " (%s)\n"), \ func, (unsigned long)nmemb, (unsigned long)size - libxl__log(ctx, XTL_CRITICAL, ENOMEM, 0,0, func, L); + libxl__log(ctx, XTL_CRITICAL, ENOMEM, 0,0, func, INVALID_DOMID, L); fprintf(stderr, L); fflush(stderr); _exit(-1); @@ -202,7 +202,7 @@ char *libxl__dirname(libxl__gc *gc, const char *s) void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, - const char *fmt, va_list ap) + uint32_t domid, const char *fmt, va_list ap) { /* WARNING this function may not call any libxl-provided * memory allocation function, as those may @@ -211,6 +211,7 @@ void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, char *base = NULL; int rc, esave; char fileline[256]; + char domain[256]; esave = errno; @@ -221,22 +222,25 @@ void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, if (file) snprintf(fileline, sizeof(fileline), "%s:%d",file,line); fileline[sizeof(fileline)-1] = 0; + domain[0] = 0; + if (domid != INVALID_DOMID) + snprintf(domain, sizeof(domain), "Domain %"PRIu32":", domid); x: xtl_log(ctx->lg, msglevel, errnoval, "libxl", - "%s%s%s%s" "%s", + "%s%s%s%s%s" "%s", fileline, func&&file?":":"", func?func:"", func||file?": ":"", - base); + domain, base); if (base != enomem) free(base); errno = esave; } void libxl__log(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, - const char *fmt, ...) + uint32_t domid, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - libxl__logv(ctx, msglevel, errnoval, file, line, func, fmt, ap); + libxl__logv(ctx, msglevel, errnoval, file, line, func, domid, fmt, ap); va_end(ap); } diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 8366fee..5f46578 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -152,13 +152,22 @@ #define LIBXL__LOGGING_ENABLED #ifdef LIBXL__LOGGING_ENABLED -#define LIBXL__LOG(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, _f, ##_a) -#define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, _f, ##_a) -#define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, _f, ##_a) +#define LIBXL__LOG(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) +#define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) +#define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, INVALID_DOMID, _f, ##_a) + +/* Same log functions as above, but with _d being a domain id. */ +#define LIBXL__LOGD(ctx, loglevel, _d, _f, _a...) libxl__log(ctx, loglevel, -1, __FILE__, __LINE__, __func__, _d, _f, ##_a) +#define LIBXL__LOGD_ERRNO(ctx, loglevel, _d, _f, _a...) libxl__log(ctx, loglevel, errno, __FILE__, __LINE__, __func__, _d, _f, ##_a) +#define LIBXL__LOGD_ERRNOVAL(ctx, loglevel, errnoval, _d, _f, _a...) libxl__log(ctx, loglevel, errnoval, __FILE__, __LINE__, __func__, _d, _f, ##_a) #else #define LIBXL__LOG(ctx, loglevel, _f, _a...) #define LIBXL__LOG_ERRNO(ctx, loglevel, _f, _a...) #define LIBXL__LOG_ERRNOVAL(ctx, loglevel, errnoval, _f, _a...) + +#define LIBXLD__LOG(ctx, loglevel, _d, _f, _a...) +#define LIBXLD__LOG_ERRNO(ctx, loglevel, _d, _f, _a...) +#define LIBXLD__LOG_ERRNOVAL(ctx, loglevel, errnoval, _d, _f, _a...) #endif /* all of these macros preserve errno (saving and restoring) */ @@ -169,14 +178,16 @@ _hidden void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file /* may be 0 */, int line /* ignored if !file */, const char *func /* may be 0 */, + uint32_t domid /* may be INVALID_DOMID */, const char *fmt, va_list al) - __attribute__((format(printf,7,0))); + __attribute__((format(printf,8,0))); _hidden void libxl__log(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file /* may be 0 */, int line /* ignored if !file */, const char *func /* may be 0 */, + uint32_t domid /* may be INVALID_DOMID */, const char *fmt, ...) - __attribute__((format(printf,7,8))); + __attribute__((format(printf,8,9))); /* these functions preserve errno (saving and restoring) */ @@ -3875,22 +3886,35 @@ _hidden void libxl__remus_restore_setup(libxl__egc *egc, * void LOG(<xtl_level_suffix>, const char *fmt, ...); * void LOGE(<xtl_level_suffix>, const char *fmt, ...); * void LOGEV(<xtl_level_suffix>, int errnoval, const char *fmt, ...); + * + * void LOGD(<xtl_level_suffix>, uint32_t domid, const char *fmt, ...); + * void LOGED(<xtl_level_suffix>, uint32_t domid, const char *fmt, ...); + * void LOGEVD(<xtl_level_suffix>, int errnoval, uint32_t domid, const char *fmt, ...); * Use * libxl__gc *gc; * - * Trivial convenience wrappers for LIBXL__LOG, LIBXL__LOG_ERRNO and - * LIBXL__LOG_ERRNOVAL, respectively (and thus for libxl__log). + * Trivial convenience wrappers for LIBXL__LOG, LIBXL__LOG_ERRNO, + * LIBXL__LOG_ERRNOVAL, LIBXL__LOGD, LIBXL__LOGD_ERRNO and + * LIBXL__LOGD_ERRNOVAL respectively (and thus for libxl__log). * * XTL_<xtl_level_suffix> should exist and be an xentoollog.h log level * So <xtl_level_suffix> should be one of * DEBUG VERBOSE DETAIL PROGRESS INFO NOTICE WARN ERROR ERROR CRITICAL * Of these, most of libxl uses * DEBUG INFO WARN ERROR + * + * The LOG*D family will preprend the log message with a string formatted + * as follows: 'Domain %PRIu32:'. This should help better automatic sorting + * of log messages per domain. */ #define LOG(l,f, ...) LIBXL__LOG(CTX,XTL_##l,(f),##__VA_ARGS__) #define LOGE(l,f, ...) LIBXL__LOG_ERRNO(CTX,XTL_##l,(f),##__VA_ARGS__) #define LOGEV(l,e,f, ...) LIBXL__LOG_ERRNOVAL(CTX,XTL_##l,(e),(f),##__VA_ARGS__) +#define LOGD(l,d,f, ...) LIBXL__LOGD(CTX,XTL_##l,(d),(f),##__VA_ARGS__) +#define LOGED(l,d,f, ...) LIBXL__LOGD_ERRNO(CTX,XTL_##l,(d),(f),##__VA_ARGS__) +#define LOGEVD(l,e,d,f, ...) LIBXL__LOGD_ERRNOVAL(CTX,XTL_##l,(e),(d),(f),##__VA_ARGS__) + /* Locking functions. See comment for "lock" member of libxl__ctx. */ -- 2.10.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |