Bug 1064948

Summary: RFE: libguestfs logging should be connected up to openstack logging
Product: Red Hat OpenStack Reporter: Richard W.M. Jones <rjones>
Component: openstack-novaAssignee: Matthew Booth <mbooth>
Status: CLOSED CURRENTRELEASE QA Contact: yeylon <yeylon>
Severity: low Docs Contact:
Priority: low    
Version: 5.0 (RHEL 7)CC: mbooth, ndipanov, sgordon, srevivo, yeylon
Target Milestone: ---Keywords: FutureFeature, ZStream
Target Release: 6.0 (Juno)   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-09-08 15:10:13 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Richard W.M. Jones 2014-02-13 15:44:16 UTC
Description of problem:

We were trying to chase up a bug in libguestfs integration with
OpenStack.  It was made much harder because the only way to diagnose
the bug was to manually run the nova service after manually setting
environment variables:
http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs

It would be much nicer if:

(1) There was a Nova setting to enable debugging, like:
      libguestfs_debug = 1
    or something along those lines.

(2) Nova used the events API to collect libguestfs debug messages
    and push them into Openstack's own logging system.  See code
    example below.

Version-Release number of selected component (if applicable):

Current git version, and all versions AFAIK.

---------

Here is how you enable logging programmatically and capture
the log messages.

(a) As soon as possible after creating the guestfs handle, call
either (or better, both) of these functions:

g.set_trace (1)         # just traces libguestfs API calls
g.set_verbose (1)       # verbose debugging

(b) Register an event handler like this:

events = guestfs.EVENT_APPLIANCE | guestfs.EVENT_LIBRARY \
         | guestfs.EVENT_WARNING | guestfs.EVENT_TRACE
g.set_event_callback (log_callback, events)

(c) The log_callback function should look something like this:

def log_callback (ev,eh,buf,array):
    if ev == guestfs.EVENT_APPLIANCE:
        buf = buf.rstrip()
    # What just happened?
    LOG.debug ("event=%s eh=%d buf='%s' array=%s" %
               (guestfs.event_to_string (ev), eh, buf, array))

There is a fully working example here:

https://github.com/libguestfs/libguestfs/blob/master/python/t/420-log-messages.py

Comment 5 Stephen Gordon 2015-09-08 15:10:13 UTC
Looks like this actually got done in Kilo.