On Wed, Jun 16, 2021 at 12:19:16PM +0200, Olaf Hering wrote: > In src/libxl/libxl_conf.c:libxlDriverConfigInit, virLogGetDefaultPriority > is used to specify the (private) loglevel of an external library. This > value could be controlled via "log_level=N" in libvirtd.conf. But doing > it that way will affect libvirtd itself, instead of libxenlight.so as > intended. There might be ways to suppress everything but libxl output > via "log_filters=", but it is not clear what the syntax would be. We support wildcards so probably: log_filters="3:*" > I wonder what the preferred way is to specify the desired loglevel for > the external library. It seems a separate configuration setting is > required so that each value of XTL_* from xentoollog.h can be specified. In general I think the global log level concept in libvirt is flawed, because libvirt has way too much logging present for it to be viable to control level globally. So the right answer is really to use the fine grained logging filters which control logging per virLogSource object. Usually there is a single virLogSource per file. In the case of libxl, it provides callbacks that can be used to receive the messages and then output them wherever is needed. The libxl driver does this to write logs into the per-domain log file. The problem is that the libvirt_vmessage method is filtering messages based on the 'minLevel' field which is set from virLogGetDefaultPriority I think the better solution is to filter based on a virLogSource object. Two options in this respect. Either we can use the existing VIR_LOG_INIT("libxl.libxl_logger") source from libxl_logger.c Or we can define a second logging source manually static virLogSource virLogLibXL = { .name = "libxl.libxl_library", .priority = VIR_LOG_ERROR, .serial = 0, } The only complication here is that the 'priority' field is not valid until we've called virLogVMessage with this virLogSource instance. If we're reusing the existing virLogSource instance from libxl_logger.c that's ok, as we have a VIR_DEBUG call that will trigger update of the 'priority' field. If we're defining a custom virLogSource instance, then we need to make the virLogSourceUpdate() method public from virlog.c, so that you can call it to update 'priority'. eg libvirt_vmessage needs todo if (source->serial < virLogFiltersSerial) virLogSourceUpdate(source); Anyway if you used a virLogSource object, then turning on debugging exclusively for libxl library messages would be as simple as log_filters="1:libxl.libxl_library" without affecting the global libvirt logging behaviour Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|