httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cove...@apache.org
Subject svn commit: r1490493 - in /httpd/httpd/trunk: CHANGES docs/manual/programs/rotatelogs.xml support/rotatelogs.c
Date Fri, 07 Jun 2013 01:51:31 GMT
Author: covener
Date: Fri Jun  7 01:51:31 2013
New Revision: 1490493

URL: http://svn.apache.org/r1490493
Log:
rotatelogs: add -n number-of-files option to roate through a number
of fixed-name logfiles. 



Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/docs/manual/programs/rotatelogs.xml
    httpd/httpd/trunk/support/rotatelogs.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1490493&r1=1490492&r2=1490493&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Fri Jun  7 01:51:31 2013
@@ -1,5 +1,7 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
+  *) rotatelogs: add -n number-of-files option to roate through a number
+     of fixed-name logfiles. [Eric Covener]
 
   *) mod_lua: If a LuaMapHandler doesn't return any value, log a warning
      and treat it as apache2.OK. [Eric Covener]

Modified: httpd/httpd/trunk/docs/manual/programs/rotatelogs.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/programs/rotatelogs.xml?rev=1490493&r1=1490492&r2=1490493&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/programs/rotatelogs.xml (original)
+++ httpd/httpd/trunk/docs/manual/programs/rotatelogs.xml Fri Jun  7 01:51:31 2013
@@ -41,6 +41,7 @@
      [ -<strong>v</strong> ]
      [ -<strong>e</strong> ]
      [ -<strong>c</strong> ]
+     [ -<strong>n</strong> <var>number-of-files</var> ]
      <var>logfile</var>
      <var>rotationtime</var>|<var>filesize</var>(B|K|M|G)
      [ <var>offset</var> ]</code></p>
@@ -102,6 +103,11 @@ processed in real time by a further tool
 <dt><code>-c</code></dt>
 <dd>Create log file for each interval, even if empty.</dd>
 
+<dt><code>-n <var>number-of-files</var></code></dt>
+<dd>Use a circular list of filenames without timestamps.
+With -n 3, the series of log files opened would be
+"logfile", "logfile.1", "logfile.2", then overwriting "logfile".</dd>
+
 <dt><code><var>logfile</var></code></dt>
 
 <dd><p>The path plus basename of the logfile.  If <var>logfile</var>

Modified: httpd/httpd/trunk/support/rotatelogs.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/support/rotatelogs.c?rev=1490493&r1=1490492&r2=1490493&view=diff
==============================================================================
--- httpd/httpd/trunk/support/rotatelogs.c (original)
+++ httpd/httpd/trunk/support/rotatelogs.c Fri Jun  7 01:51:31 2013
@@ -70,6 +70,7 @@ struct rotate_config {
 #if APR_FILES_AS_SOCKETS
     int create_empty;
 #endif
+    int num_files;
 };
 
 typedef struct rotate_status rotate_status_t;
@@ -89,6 +90,7 @@ struct rotate_status {
     int rotateReason;
     int tLogEnd;
     int nMessCount;
+    int fileNum;
 };
 
 static rotate_config_t config;
@@ -101,9 +103,9 @@ static void usage(const char *argv0, con
     }
     fprintf(stderr,
 #if APR_FILES_AS_SOCKETS
-            "Usage: %s [-v] [-l] [-L linkname] [-p prog] [-f] [-t] [-e] [-c] <logfile>
"
+            "Usage: %s [-v] [-l] [-L linkname] [-p prog] [-f] [-t] [-e] [-c] [-n number]
<logfile> "
 #else
-            "Usage: %s [-v] [-l] [-L linkname] [-p prog] [-f] [-t] [-e] <logfile> "
+            "Usage: %s [-v] [-l] [-L linkname] [-p prog] [-f] [-t] [-e] [-n number] <logfile>
"
 #endif
             "{<rotation time in seconds>|<rotation size>(B|K|M|G)} "
             "[offset minutes from UTC]\n\n",
@@ -362,6 +364,7 @@ static void doRotate(rotate_config_t *co
     int tLogStart;
     apr_status_t rv;
     struct logfile newlog;
+    int thisLogNum = -1;
 
     status->rotateReason = ROTATE_NONE;
 
@@ -395,6 +398,16 @@ static void doRotate(rotate_config_t *co
         if (config->truncate) {
             apr_snprintf(newlog.name, sizeof(newlog.name), "%s", config->szLogRoot);
         }
+        else if (config->num_files > 0) { 
+            if (status->fileNum == -1 || status->fileNum == (config->num_files -
1)) {
+                thisLogNum = 0;
+                apr_snprintf(newlog.name, sizeof(newlog.name), "%s", config->szLogRoot);
+            }
+            else { 
+                thisLogNum = status->fileNum + 1;
+                apr_snprintf(newlog.name, sizeof(newlog.name), "%s.%d", config->szLogRoot,
thisLogNum);
+            }
+        }
         else {
             apr_snprintf(newlog.name, sizeof(newlog.name), "%s.%010d", config->szLogRoot,
                          tLogStart);
@@ -405,11 +418,13 @@ static void doRotate(rotate_config_t *co
         fprintf(stderr, "Opening file %s\n", newlog.name);
     }
     rv = apr_file_open(&newlog.fd, newlog.name, APR_WRITE | APR_CREATE | APR_APPEND
-                       | (config->truncate ? APR_TRUNCATE : 0), APR_OS_DEFAULT, newlog.pool);
+                       | (config->truncate || (config->num_files > 0) ? APR_TRUNCATE
: 0), 
+                       APR_OS_DEFAULT, newlog.pool);
     if (rv == APR_SUCCESS) {
         /* Handle post-rotate processing. */
         post_rotate(newlog.pool, &newlog, config, status);
 
+        status->fileNum = thisLogNum;
         /* Close out old (previously 'current') logfile, if any. */
         if (status->current.fd) {
             close_logfile(config, &status->current);
@@ -529,9 +544,9 @@ int main (int argc, const char * const a
     apr_pool_create(&status.pool, NULL);
     apr_getopt_init(&opt, status.pool, argc, argv);
 #if APR_FILES_AS_SOCKETS
-    while ((rv = apr_getopt(opt, "lL:p:ftvec", &c, &opt_arg)) == APR_SUCCESS) {
+    while ((rv = apr_getopt(opt, "lL:p:ftvecn:", &c, &opt_arg)) == APR_SUCCESS) {
 #else
-    while ((rv = apr_getopt(opt, "lL:p:ftve", &c, &opt_arg)) == APR_SUCCESS) {
+    while ((rv = apr_getopt(opt, "lL:p:ftven:", &c, &opt_arg)) == APR_SUCCESS) {
 #endif
         switch (c) {
         case 'l':
@@ -560,6 +575,10 @@ int main (int argc, const char * const a
             config.create_empty = 1;
             break;
 #endif
+        case 'n':
+            config.num_files = atoi(opt_arg);
+            status.fileNum = -1;
+            break;
         }
     }
 
@@ -588,6 +607,16 @@ int main (int argc, const char * const a
 
     config.use_strftime = (strchr(config.szLogRoot, '%') != NULL);
 
+    if (config.use_strftime && config.num_files > 0) { 
+        fprintf(stderr, "Cannot use -n with %% in filename\n");
+        exit(1);
+    }
+
+    if (status.fileNum == -1 && config.num_files < 1) { 
+        fprintf(stderr, "Invalid -n argument\n");
+        exit(1);
+    }
+
     if (apr_file_open_stdin(&f_stdin, status.pool) != APR_SUCCESS) {
         fprintf(stderr, "Unable to open stdin\n");
         exit(1);



Mime
View raw message