[PATCH 1/6] Force all logs to go to the round robbin memory buffer

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

 



Initially only the log actually written out by libvirt were
saved on the memory buffer, this patch forces all informations
including info and debug to be saved in memory too. This is
useful to get full data in case of crash.

Signed-off-by: Daniel Veillard <veillard@xxxxxxxxxx>
---
 src/util/logging.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/util/logging.c b/src/util/logging.c
index 8e7eaa8..33b0992 100644
--- a/src/util/logging.c
+++ b/src/util/logging.c
@@ -569,11 +569,12 @@ void virLogMessage(const char *category, int priority, const char *funcname,
                    long long linenr, int flags, const char *fmt, ...) {
     static bool logVersionStderr = true;
     char *str = NULL;
-    char *msg;
+    char *msg = NULL;
     struct timeval cur_time;
     struct tm time_info;
     int len, fprio, i, ret;
     int saved_errno = errno;
+    int emit = 1;
 
     if (!virLogInitialized)
         virLogStartup();
@@ -587,9 +588,9 @@ void virLogMessage(const char *category, int priority, const char *funcname,
     fprio = virLogFiltersCheck(category);
     if (fprio == 0) {
         if (priority < virLogDefaultPriority)
-            goto cleanup;
+            emit = 0;
     } else if (priority < fprio) {
-        goto cleanup;
+        emit = 0;
     }
 
     /*
@@ -609,8 +610,8 @@ void virLogMessage(const char *category, int priority, const char *funcname,
         goto cleanup;
 
     /*
-     * Log based on defaults, first store in the history buffer
-     * then push the message on the outputs defined, if none
+     * Log based on defaults, first store in the history buffer,
+     * then if emit push the message on the outputs defined, if none
      * use stderr.
      * NOTE: the locking is a single point of contention for multiple
      *       threads, but avoid intermixing. Maybe set up locks per output
@@ -618,6 +619,9 @@ void virLogMessage(const char *category, int priority, const char *funcname,
      */
     len = strlen(msg);
     virLogStr(msg, len);
+    if (emit == 0)
+        goto cleanup;
+
     virLogLock();
     for (i = 0; i < virLogNbOutputs;i++) {
         if (priority >= virLogOutputs[i].priority) {
@@ -647,8 +651,8 @@ void virLogMessage(const char *category, int priority, const char *funcname,
     }
     virLogUnlock();
 
-    VIR_FREE(msg);
 cleanup:
+    VIR_FREE(msg);
     errno = saved_errno;
 }
 
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]