]> granicus.if.org Git - apache/commitdiff
rotatelogs: Add -e option to write logs through to stdout for optional
authorGraham Leggett <minfrin@apache.org>
Tue, 21 Dec 2010 17:52:43 +0000 (17:52 +0000)
committerGraham Leggett <minfrin@apache.org>
Tue, 21 Dec 2010 17:52:43 +0000 (17:52 +0000)
further processing.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1051582 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/programs/rotatelogs.xml
support/rotatelogs.c

diff --git a/CHANGES b/CHANGES
index 344cb8a173dd2a8d4c8320999c1b0925955b74f3..c2c43cc281ed00209c25dc93a666a74c7945598c 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 
 Changes with Apache 2.3.11
 
+  *) rotatelogs: Add -e option to write logs through to stdout for optional
+     further processing. [Graham Leggett]
+
   *) mod_ssl: Correctly read full lines in input filter when the line is
      incomplete during first read. PR 50481. [Ruediger Pluem]
 
index 1067dd39e49435ac6b47a539e6f341c3af96c0c8..ecb717659bedc610904001ca9e389fc8134c1b5a 100644 (file)
@@ -38,6 +38,7 @@
      [ -<strong>L</strong> <var>linkname</var> ]
      [ -<strong>f</strong> ]
      [ -<strong>v</strong> ]
+     [ -<strong>e</strong> ]
      <var>logfile</var>
      <var>rotationtime</var>|<var>filesize</var>(B|K|M|G) 
      [ <var>offset</var> ]</code></p>
@@ -80,6 +81,10 @@ will be respected.
 the result of the configuration parsing, and all file open and
 close actions.</dd>
 
+<dt><code>-e</code></dt>
+<dd>Echo logs through to stdout. Useful when logs need to be further
+processed in real time by a further tool in the chain.</dd>
+
 <dt><code><var>logfile</var></code></dt>
 
 <dd><p>The path plus basename of the logfile.  If <var>logfile</var>
index 37f11096767a493250ac01a6906364c33e2eac6f..cb85458edee7639b8407267946a71561c827b7a1 100644 (file)
@@ -87,6 +87,7 @@ struct rotate_config {
     int use_strftime;
     int force_open;
     int verbose;
+    int echo;
     const char *szLogRoot;
     int truncate;
     const char *linkfile;
@@ -116,7 +117,7 @@ static void usage(const char *argv0, const char *reason)
         fprintf(stderr, "%s\n", reason);
     }
     fprintf(stderr,
-            "Usage: %s [-v] [-l] [-L linkname] [-f] [-t] <logfile> "
+            "Usage: %s [-v] [-l] [-L linkname] [-f] [-t] [-e] <logfile> "
             "{<rotation time in seconds>|<rotation size>(B|K|M|G)} "
             "[offset minutes from UTC]\n\n",
             argv0);
@@ -142,7 +143,8 @@ static void usage(const char *argv0, const char *reason)
             "instead of rotated, and is useful where tail is used to\n"
             "process logs in real time.  If the -L option is specified, "
             "a hard link will be\nmade from the current log file to the "
-            "specified filename.\n");
+            "specified filename. In the case of the -e option, the log "
+            "will be echoed through to stdout for further processing.\n");
     exit(1);
 }
 
@@ -435,6 +437,7 @@ int main (int argc, const char * const argv[])
     char buf[BUFSIZE];
     apr_size_t nRead, nWrite;
     apr_file_t *f_stdin;
+    apr_file_t *f_stdout;
     apr_getopt_t *opt;
     apr_status_t rv;
     char c;
@@ -451,6 +454,7 @@ int main (int argc, const char * const argv[])
     config.use_strftime = 0;
     config.force_open = 0;
     config.verbose = 0;
+    config.echo = 0;
     status.pool = NULL;
     status.pfile = NULL;
     status.pfile_prev = NULL;
@@ -462,7 +466,7 @@ int main (int argc, const char * const argv[])
 
     apr_pool_create(&status.pool, NULL);
     apr_getopt_init(&opt, status.pool, argc, argv);
-    while ((rv = apr_getopt(opt, "lL:ftv", &c, &opt_arg)) == APR_SUCCESS) {
+    while ((rv = apr_getopt(opt, "lL:ftve", &c, &opt_arg)) == APR_SUCCESS) {
         switch (c) {
         case 'l':
             config.use_localtime = 1;
@@ -479,6 +483,9 @@ int main (int argc, const char * const argv[])
         case 'v':
             config.verbose = 1;
             break;
+        case 'e':
+            config.echo = 1;
+            break;
         }
     }
 
@@ -512,6 +519,11 @@ int main (int argc, const char * const argv[])
         exit(1);
     }
 
+    if (apr_file_open_stdout(&f_stdout, status.pool) != APR_SUCCESS) {
+        fprintf(stderr, "Unable to open stdout\n");
+        exit(1);
+    }
+
     /*
      * Write out result of config parsing if verbose is set.
      */
@@ -575,6 +587,12 @@ int main (int argc, const char * const argv[])
         else {
             status.nMessCount++;
         }
+        if (config.echo) {
+            if (apr_file_write_full(f_stdout, buf, nRead, &nWrite)) {
+                fprintf(stderr, "Unable to write to stdout\n");
+                exit(4);
+            }
+        }
     }
     /* Of course we never, but prevent compiler warnings */
     return 0;