[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RESEND PATCH 07/12] golang/xenlight: add logging conveniences for within xenlight



On Fri, Jun 18, 2021 at 01:17:07PM +0000, George Dunlap wrote:
> 
> 
> > On May 24, 2021, at 9:36 PM, Nick Rosbrook <rosbrookn@xxxxxxxxx> wrote:
> > 
> > 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>
> 
> Looks good.  One comment:
> 
> > ---
> > 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
> 
> Why are we not defining this one?  Don’t we want to be able to disable 
> logging entirely?

Hm, I'm not sure. I'll poke around to see if I had a reason for this,
otherwise I will un-comment this line.

> 
> > +   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))
> 
> Hmm, allocating and freeing a fixed string every time seems pretty wasteful.  
> Would it make more sense to either use a static C string in the CGo code at 
> the top instead?  Or if not, to make context a global variable we allocate 
> once at the package level and re-use?

You're right, we should probably define a static C string in the
preamble.
> 
> Also, is ‘xenlight’ informative enough?  I haven’t looked at the other 
> “context” strings; would “go-xenlight” or something be better?
> 

I believe libxl uses "libxl." I would be fine with "go-xenlight" if you
prefer that. 

> > +
> > +   C.xtl_log_wrap((*C.xentoollog_logger)(unsafe.Pointer(ctx.logger)),
> > +           C.xentoollog_level(lvl), C.int(errnoval), context, msg)
> > +}
> 
> I think we want to make it possible long-term to configure your own logger or 
> have no logger at all; so maybe we should add a `if (ctx.logger == nil) 
> return;` at then top?
> 
Yeah, that's a good idea.

> Other than that looks good, thanks!
> 
>  -George

Thanks,
NR



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.