[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RESEND PATCH 07/12] golang/xenlight: add logging conveniences for within xenlight
Add some logging methods to Context to provide easy use of the Contenxt's xentoollog_logger. These are not exported, but the LogLevel type is so that a later commit can allow the Context's log level to be configurable. Becuase cgo does not support calling C functions with variable arguments, e.g. xtl_log, add an xtl_log_wrap function to the cgo preamble that accepts an already formatted string, and handle the formatting in Go. Signed-off-by: Nick Rosbrook <rosbrookn@xxxxxxxxxxxx> --- tools/golang/xenlight/xenlight.go | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tools/golang/xenlight/xenlight.go b/tools/golang/xenlight/xenlight.go index fc3eb0bf3f..f68d7b6e97 100644 --- a/tools/golang/xenlight/xenlight.go +++ b/tools/golang/xenlight/xenlight.go @@ -32,6 +32,15 @@ static const libxl_childproc_hooks childproc_hooks = { .chldowner = libxl_sigchl void xenlight_set_chldproc(libxl_ctx *ctx) { libxl_childproc_setmode(ctx, &childproc_hooks, NULL); } + +void xtl_log_wrap(struct xentoollog_logger *logger, + xentoollog_level level, + int errnoval, + const char *context, + const char *msg) +{ + xtl_log(logger, level, errnoval, context, "%s", msg); +} */ import "C" @@ -192,6 +201,42 @@ func (ctx *Context) Close() error { return nil } +// LogLevel represents an xentoollog_level, and can be used to configre the log +// level of a Context's logger. +type LogLevel int + +const ( + //LogLevelNone LogLevel = C.XTL_NONE + LogLevelDebug LogLevel = C.XTL_DEBUG + LogLevelVerbose LogLevel = C.XTL_VERBOSE + LogLevelDetail LogLevel = C.XTL_DETAIL + LogLevelProgress LogLevel = C.XTL_PROGRESS + LogLevelInfo LogLevel = C.XTL_INFO + LogLevelNotice LogLevel = C.XTL_NOTICE + LogLevelWarn LogLevel = C.XTL_WARN + LogLevelError LogLevel = C.XTL_ERROR + LogLevelCritical LogLevel = C.XTL_CRITICAL + //LogLevelNumLevels LogLevel = C.XTL_NUM_LEVELS +) + +func (ctx *Context) log(lvl LogLevel, errnoval int, format string, a ...interface{}) { + msg := C.CString(fmt.Sprintf(format, a...)) + defer C.free(unsafe.Pointer(msg)) + context := C.CString("xenlight") + defer C.free(unsafe.Pointer(context)) + + C.xtl_log_wrap((*C.xentoollog_logger)(unsafe.Pointer(ctx.logger)), + C.xentoollog_level(lvl), C.int(errnoval), context, msg) +} + +func (ctx *Context) logd(format string, a ...interface{}) { + ctx.log(LogLevelDebug, -1, format, a...) +} + +func (ctx *Context) logw(format string, a ...interface{}) { + ctx.log(LogLevelWarn, -1, format, a...) +} + /* * Types: Builtins */ -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |