]> xenbits.xensource.com Git - libvirt.git/commitdiff
virtlogd: make max file size & number of backups configurable
authorDaniel P. Berrange <berrange@redhat.com>
Fri, 1 Jul 2016 16:40:55 +0000 (17:40 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 7 Jul 2016 14:08:54 +0000 (15:08 +0100)
Currently virtlogd has a hardcoded max file size of 128kb
and max of 3 backups. This adds two new config parameters
to /etc/libvirt/virtlogd.conf to let these be customized.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/logging/log_daemon.c
src/logging/log_daemon_config.c
src/logging/log_daemon_config.h
src/logging/log_handler.c
src/logging/log_handler.h
src/logging/test_virtlogd.aug.in
src/logging/virtlogd.aug
src/logging/virtlogd.conf

index 9f71ca93b51b434235a6852f2926c9e4a6c33997..80e75bf9a1b42b9a97bdb98d9921f189a374fe43 100644 (file)
@@ -165,6 +165,8 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
         goto error;
 
     if (!(logd->handler = virLogHandlerNew(privileged,
+                                           config->max_size,
+                                           config->max_backups,
                                            virLogDaemonInhibitor,
                                            logd)))
         goto error;
@@ -185,7 +187,8 @@ virLogDaemonGetHandler(virLogDaemonPtr dmn)
 
 
 static virLogDaemonPtr
-virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged)
+virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged,
+                               virLogDaemonConfigPtr config)
 {
     virLogDaemonPtr logd;
     virJSONValuePtr child;
@@ -226,6 +229,8 @@ virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged)
 
     if (!(logd->handler = virLogHandlerNewPostExecRestart(child,
                                                           privileged,
+                                                          config->max_size,
+                                                          config->max_backups,
                                                           virLogDaemonInhibitor,
                                                           logd)))
         goto error;
@@ -717,7 +722,8 @@ static int
 virLogDaemonPostExecRestart(const char *state_file,
                             const char *pid_file,
                             int *pid_file_fd,
-                            bool privileged)
+                            bool privileged,
+                            virLogDaemonConfigPtr config)
 {
     const char *gotmagic;
     char *wantmagic = NULL;
@@ -766,7 +772,9 @@ virLogDaemonPostExecRestart(const char *state_file,
         (*pid_file_fd = virPidFileAcquirePath(pid_file, false, getpid())) < 0)
         goto cleanup;
 
-    if (!(logDaemon = virLogDaemonNewPostExecRestart(object, privileged)))
+    if (!(logDaemon = virLogDaemonNewPostExecRestart(object,
+                                                     privileged,
+                                                     config)))
         goto cleanup;
 
     ret = 1;
@@ -1086,7 +1094,8 @@ int main(int argc, char **argv) {
     if ((rv = virLogDaemonPostExecRestart(state_file,
                                           pid_file,
                                           &pid_file_fd,
-                                          privileged)) < 0) {
+                                          privileged,
+                                          config)) < 0) {
         ret = VIR_LOG_DAEMON_ERR_INIT;
         goto cleanup;
     }
index 9e729fa24a19a7294da35072a6e576de1d52f5e3..b5849702c4359ddb09e9e107d2408c14d1ecde39 100644 (file)
@@ -128,6 +128,8 @@ virLogDaemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
         return NULL;
 
     data->max_clients = 1024;
+    data->max_size = 128 * 1024;
+    data->max_backups = 3;
 
     return data;
 }
@@ -154,6 +156,9 @@ virLogDaemonConfigLoadOptions(virLogDaemonConfigPtr data,
     GET_CONF_STR(conf, filename, log_outputs);
     GET_CONF_UINT(conf, filename, max_clients);
 
+    GET_CONF_UINT(conf, filename, max_size);
+    GET_CONF_UINT(conf, filename, max_backups);
+
     return 0;
 
  error:
index 24cc631b7dc7a540215e0cec9737938f6bdfa07c..0da7b0bee0bcb527c8908165eab3041c802efc2d 100644 (file)
@@ -34,6 +34,9 @@ struct _virLogDaemonConfig {
     char *log_filters;
     char *log_outputs;
     int max_clients;
+
+    size_t max_backups;
+    size_t max_size;
 };
 
 
index a8cb6cf878ab4b31a25fc42d679ed151c3deb071..cd0ba6ec248e11dcbd95721d88f489f2c3fc3fb6 100644 (file)
@@ -41,8 +41,6 @@ VIR_LOG_INIT("logging.log_handler");
 
 #define VIR_FROM_THIS VIR_FROM_LOGGING
 
-#define DEFAULT_FILE_SIZE (128 * 1024)
-#define DEFAULT_MAX_BACKUP 3
 #define DEFAULT_MODE 0600
 
 typedef struct _virLogHandlerLogFile virLogHandlerLogFile;
@@ -62,6 +60,9 @@ struct _virLogHandler {
     virObjectLockable parent;
 
     bool privileged;
+    size_t max_size;
+    size_t max_backups;
+
     virLogHandlerLogFilePtr *files;
     size_t nfiles;
 
@@ -184,6 +185,8 @@ virLogHandlerDomainLogFileEvent(int watch,
 
 virLogHandlerPtr
 virLogHandlerNew(bool privileged,
+                 size_t max_size,
+                 size_t max_backups,
                  virLogHandlerShutdownInhibitor inhibitor,
                  void *opaque)
 {
@@ -196,6 +199,8 @@ virLogHandlerNew(bool privileged,
         goto error;
 
     handler->privileged = privileged;
+    handler->max_size = max_size;
+    handler->max_backups = max_backups;
     handler->inhibitor = inhibitor;
     handler->opaque = opaque;
 
@@ -254,8 +259,8 @@ virLogHandlerLogFilePostExecRestart(virLogHandlerPtr handler,
     }
 
     if ((file->file = virRotatingFileWriterNew(path,
-                                               DEFAULT_FILE_SIZE,
-                                               DEFAULT_MAX_BACKUP,
+                                               handler->max_size,
+                                               handler->max_backups,
                                                false,
                                                DEFAULT_MODE)) == NULL)
         goto error;
@@ -283,6 +288,8 @@ virLogHandlerLogFilePostExecRestart(virLogHandlerPtr handler,
 virLogHandlerPtr
 virLogHandlerNewPostExecRestart(virJSONValuePtr object,
                                 bool privileged,
+                                size_t max_size,
+                                size_t max_backups,
                                 virLogHandlerShutdownInhibitor inhibitor,
                                 void *opaque)
 {
@@ -292,6 +299,8 @@ virLogHandlerNewPostExecRestart(virJSONValuePtr object,
     size_t i;
 
     if (!(handler = virLogHandlerNew(privileged,
+                                     max_size,
+                                     max_backups,
                                      inhibitor,
                                      opaque)))
         return NULL;
@@ -396,8 +405,8 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
         goto error;
 
     if ((file->file = virRotatingFileWriterNew(path,
-                                               DEFAULT_FILE_SIZE,
-                                               DEFAULT_MAX_BACKUP,
+                                               handler->max_size,
+                                               handler->max_backups,
                                                trunc,
                                                DEFAULT_MODE)) == NULL)
         goto error;
@@ -487,7 +496,7 @@ virLogHandlerDomainReadLogFile(virLogHandlerPtr handler,
 
     virObjectLock(handler);
 
-    if (!(file = virRotatingFileReaderNew(path, DEFAULT_MAX_BACKUP)))
+    if (!(file = virRotatingFileReaderNew(path, handler->max_backups)))
         goto error;
 
     if (virRotatingFileReaderSeek(file, inode, offset) < 0)
@@ -542,8 +551,8 @@ virLogHandlerDomainAppendLogFile(virLogHandlerPtr handler,
 
     if (!writer) {
         if (!(newwriter = virRotatingFileWriterNew(path,
-                                                   DEFAULT_FILE_SIZE,
-                                                   DEFAULT_MAX_BACKUP,
+                                                   handler->max_size,
+                                                   handler->max_backups,
                                                    false,
                                                    DEFAULT_MODE)))
             goto cleanup;
index 4607e4556ddc9fc64c321618d0b3dd7adf0b3697..70be567ccc376c8999539ace61becdb60d430653 100644 (file)
@@ -34,10 +34,14 @@ typedef void (*virLogHandlerShutdownInhibitor)(bool inhibit,
                                                void *opaque);
 
 virLogHandlerPtr virLogHandlerNew(bool privileged,
+                                  size_t max_size,
+                                  size_t max_backups,
                                   virLogHandlerShutdownInhibitor inhibitor,
                                   void *opaque);
 virLogHandlerPtr virLogHandlerNewPostExecRestart(virJSONValuePtr child,
                                                  bool privileged,
+                                                 size_t max_size,
+                                                 size_t max_backups,
                                                  virLogHandlerShutdownInhibitor inhibitor,
                                                  void *opaque);
 
index b12f676b6fbd6b7c2ecc82934464ceb369f837fa..3e6888fd482280e0b294f5c444705e67969de6f6 100644 (file)
@@ -2,9 +2,13 @@ module Test_virtlogd =
   let conf = "log_level = 3
 log_filters=\"3:remote 4:event\"
 log_outputs=\"3:syslog:virtlogd\"
+max_size = 131072
+max_backups = 3
 "
 
    test Virtlogd.lns get conf =
         { "log_level" = "3" }
         { "log_filters" = "3:remote 4:event" }
         { "log_outputs" = "3:syslog:virtlogd" }
+        { "max_size" = "131072" }
+        { "max_backups" = "3" }
index eefba5b8a25d000b2f7a8c898d09a1e2b2b1bf58..5ed174230d8c6065c6bf6fe1548a975b43c4e34e 100644 (file)
@@ -29,6 +29,8 @@ module Virtlogd =
                      | str_entry "log_outputs"
                      | int_entry "log_buffer_size"
                      | int_entry "max_clients"
+                     | int_entry "max_size"
+                     | int_entry "max_backups"
 
    (* Each enty in the config is one of the following three ... *)
    let entry = logging_entry
index abb3633271b6445b509b9cc78437ab9fefa24136..fbd92ff8f34048d6ed2498d86853cddfce554571 100644 (file)
 # The maximum number of concurrent client connections to allow
 # over all sockets combined.
 #max_clients = 1024
+
+
+# Maximum file size before rolling over. Defaults to 128 KB
+#max_size = 131072
+
+# Maximum number of backup files to keep. Defaults to 3,
+# not including the primary active file
+#max_backups = 3