set custom loglevel for external libraries

Olaf Hering olaf at aepfle.de
Thu Jul 22 14:39:24 UTC 2021


Thanks for your reply, I had no time to look at this until now.

Am Wed, 16 Jun 2021 11:44:10 +0100
schrieb Daniel P. Berrangé <berrange at redhat.com>:

> 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

It seems log_filters= does not allow arbitrary numbers.
virLogParseFilter would just allow values from 1 to 4.
Such extra logfilter needs to handle a xentoollog_level, values from 1 to 9 (>XTL_NONE and <XTL_NUM_LEVELS).

How should this be expressed in a config setting?

Perhaps just go the easy route and obtain a value from environment?

--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -1829,7 +1829,7 @@ libxlDriverConfigInit(libxlDriverConfig *cfg)
         return -1;
     }
 
-    cfg->logger = libxlLoggerNew(cfg->logDir, virLogGetDefaultPriority());
+    cfg->logger = libxlLoggerNew(cfg->logDir);
     if (!cfg->logger) {
         VIR_ERROR(_("cannot create logger for libxenlight, disabling driver"));
         return -1;
--- a/src/libxl/libxl_logger.c
+++ b/src/libxl/libxl_logger.c
@@ -129,25 +129,33 @@ libvirt_destroy(xentoollog_logger *logger_in)
 
 
 libxlLogger *
-libxlLoggerNew(const char *logDir, virLogPriority minLevel)
+libxlLoggerNew(const char *logDir)
 {
     xentoollog_logger_libvirt logger;
     g_autofree char *path = NULL;
-
-    switch (minLevel) {
-    case VIR_LOG_DEBUG:
-        logger.minLevel = XTL_DEBUG;
-        break;
-    case VIR_LOG_INFO:
-        logger.minLevel = XTL_INFO;
-        break;
-    case VIR_LOG_WARN:
-        logger.minLevel = XTL_WARN;
-        break;
-    case VIR_LOG_ERROR:
-        logger.minLevel = XTL_ERROR;
-        break;
+    char *xenlight_minlevel = getenv("xenlight_minlevel");
+    int minlevel;
+
+    if (!(xenlight_minlevel && *xenlight_minlevel &&
+        virStrToLong_i(xenlight_minlevel, NULL, 10, &minlevel) >= 0 &&
+        minlevel > XTL_NONE && minlevel < XTL_NUM_LEVELS)) {
+        minlevel = virLogGetDefaultPriority();
+        switch (minlevel) {
+        case VIR_LOG_DEBUG:
+            minlevel = XTL_DEBUG;
+            break;
+        case VIR_LOG_INFO:
+            minlevel = XTL_INFO;
+            break;
+        case VIR_LOG_WARN:
+            minlevel = XTL_WARN;
+            break;
+        case VIR_LOG_ERROR:
+            minlevel = XTL_ERROR;
+            break;
+        }
     }
+    logger.minLevel = minlevel;
     logger.logDir = logDir;
 
     if ((logger.files = virHashNew(libxlLoggerFileFree)) == NULL)
--- a/src/libxl/libxl_logger.h
+++ b/src/libxl/libxl_logger.h
@@ -24,8 +24,7 @@
 
 typedef struct xentoollog_logger_libvirt libxlLogger;
 
-libxlLogger *libxlLoggerNew(const char *logDir,
-                              virLogPriority minLevel);
+libxlLogger *libxlLoggerNew(const char *logDir);
 void libxlLoggerFree(libxlLogger *logger);
 
 void libxlLoggerOpenFile(libxlLogger *logger, int id, const char *name,


Olaf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: Digitale Signatur von OpenPGP
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210722/45cbb103/attachment-0001.sig>


More information about the libvir-list mailing list