[PATCH 3/4] util: virrotatingfile: virtlogd timestamp appending logic

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

 



Make use of timestamp option in virtlogd config and append timestamp to
domain event logs after every '\n' character.

Signed-off-by: Shaleen Bathla <shaleen.bathla@xxxxxxxxxx>
---
 src/logging/log_handler.c  | 10 +++++++---
 src/util/virrotatingfile.c | 36 ++++++++++++++++++++++++++++++++++--
 src/util/virrotatingfile.h |  3 ++-
 3 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
index 71517bbbe5ff..9be338d92ca1 100644
--- a/src/logging/log_handler.c
+++ b/src/logging/log_handler.c
@@ -116,6 +116,7 @@ virLogHandlerDomainLogFileEvent(int watch,
     virLogHandlerLogFile *logfile;
     char buf[1024];
     ssize_t len;
+    bool timestamp = false;
 
     virObjectLock(handler);
     logfile = virLogHandlerGetLogFileFromWatch(handler, watch);
@@ -130,6 +131,9 @@ virLogHandlerDomainLogFileEvent(int watch,
         goto cleanup;
     }
 
+    if (handler->config && handler->config->timestamp)
+        timestamp = true;
+
  reread:
     len = read(fd, buf, sizeof(buf));
     if (len < 0) {
@@ -143,7 +147,7 @@ virLogHandlerDomainLogFileEvent(int watch,
         goto error;
     }
 
-    if (virRotatingFileWriterAppend(logfile->file, buf, len) != len)
+    if (virRotatingFileWriterAppend(logfile->file, buf, len, timestamp) != len)
         goto error;
 
  cleanup:
@@ -440,7 +444,7 @@ virLogHandlerDomainLogFileDrain(virLogHandlerLogFile *file)
             return;
         }
 
-        if (virRotatingFileWriterAppend(file->file, buf, len) != len)
+        if (virRotatingFileWriterAppend(file->file, buf, len, 0) != len)
             return;
     }
 }
@@ -568,7 +572,7 @@ virLogHandlerDomainAppendLogFile(virLogHandler *handler,
         writer = newwriter;
     }
 
-    if (virRotatingFileWriterAppend(writer, message, strlen(message)) < 0)
+    if (virRotatingFileWriterAppend(writer, message, strlen(message), 0) < 0)
         goto cleanup;
 
     ret = 0;
diff --git a/src/util/virrotatingfile.c b/src/util/virrotatingfile.c
index 2a44c9bf93e3..5443e850721b 100644
--- a/src/util/virrotatingfile.c
+++ b/src/util/virrotatingfile.c
@@ -431,7 +431,7 @@ virRotatingFileWriterAppendTimestamp(virRotatingFileWriter* file)
     timestamp[len-1] = ' ';
     timestamp[len] = '\0';
 
-    if (virRotatingFileWriterAppend(file, timestamp, len) != len) {
+    if (virRotatingFileWriterAppend(file, timestamp, len, 0) != len) {
         g_free(timestamp);
         return -1;
     }
@@ -446,6 +446,7 @@ virRotatingFileWriterAppendTimestamp(virRotatingFileWriter* file)
  * @file: the file context
  * @buf: the data buffer
  * @len: the number of bytes in @buf
+ * @timestamp: append timestamp config option
  *
  * Append the data in @buf to the file, performing rollover
  * of the files if their size would exceed the limit
@@ -455,10 +456,12 @@ virRotatingFileWriterAppendTimestamp(virRotatingFileWriter* file)
 ssize_t
 virRotatingFileWriterAppend(virRotatingFileWriter *file,
                             const char *buf,
-                            size_t len)
+                            size_t len,
+                            bool timestamp)
 {
     ssize_t ret = 0;
     size_t i;
+
     while (len) {
         size_t towrite = len;
         bool forceRollover = false;
@@ -488,6 +491,35 @@ virRotatingFileWriterAppend(virRotatingFileWriter *file,
             }
         }
 
+        if (timestamp && towrite) {
+            int last_nl = -1;
+            for (i = 0; i < towrite; i++) {
+                if (buf[i] == '\n') {
+                    if (safewrite(file->entry->fd, buf+last_nl+1, i-last_nl) != i-last_nl) {
+                            virReportSystemError(errno,
+                                                 _("Unable to write to file %1$s"),
+                                                 file->basepath);
+                            return -1;
+                    }
+                    if (virRotatingFileWriterAppendTimestamp(file) != 0) {
+                            virReportSystemError(errno,
+                                                 _("Unable to write to file %1$s"),
+                                                 file->basepath);
+                            return -1;
+                    }
+                    last_nl = i;
+                }
+            }
+
+            last_nl++;
+            buf += last_nl;
+            len -= last_nl;
+            ret += last_nl;
+            file->entry->pos += last_nl;
+            file->entry->len += last_nl;
+            towrite -= last_nl;
+        }
+
         if (towrite) {
             if (safewrite(file->entry->fd, buf, towrite) != towrite) {
                 virReportSystemError(errno,
diff --git a/src/util/virrotatingfile.h b/src/util/virrotatingfile.h
index 1ed8838e7df2..388774bc3913 100644
--- a/src/util/virrotatingfile.h
+++ b/src/util/virrotatingfile.h
@@ -43,7 +43,8 @@ off_t virRotatingFileWriterGetOffset(virRotatingFileWriter *file);
 
 ssize_t virRotatingFileWriterAppend(virRotatingFileWriter *file,
                                     const char *buf,
-                                    size_t len);
+                                    size_t len,
+                                    bool timestamp);
 
 int virRotatingFileReaderSeek(virRotatingFileReader *file,
                               ino_t inode,
-- 
2.39.3
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[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]

  Powered by Linux