[ -<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>
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>
int use_strftime;
int force_open;
int verbose;
+ int echo;
const char *szLogRoot;
int truncate;
const char *linkfile;
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);
"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);
}
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;
config.use_strftime = 0;
config.force_open = 0;
config.verbose = 0;
+ config.echo = 0;
status.pool = NULL;
status.pfile = NULL;
status.pfile_prev = NULL;
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;
case 'v':
config.verbose = 1;
break;
+ case 'e':
+ config.echo = 1;
+ break;
}
}
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.
*/
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;