DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14358>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14358 rotatelogs using TZ settings Summary: rotatelogs using TZ settings Product: Apache httpd-1.3 Version: 1.3.26 Platform: All OS/Version: Other Status: NEW Severity: Enhancement Priority: Other Component: Other AssignedTo: [email protected] ReportedBy: [EMAIL PROTECTED] The supplied rotatelogs tool in Apache 1.3 only allows a fixed UTC offset value. So 2 times a year the config has to be changed. I added some code in rotatelogs.c to use the local TZ settings automatically. On the command line the last option is utc_offset in minutes. I added a new value of "TZ" instead of minutes to use the local time UTC offset with daylight savings. This is the diff -C3 old.c new.c: *** rotatelogs.c.orig Wed Dec 26 18:14:06 2001 --- rotatelogs.c Tue Oct 29 22:21:49 2002 *************** *** 4,9 **** --- 4,12 ---- * Contributed by Ben Laurie <[EMAIL PROTECTED]> * * 12 Mar 1996 + * + * 28 Oct 2002: added UTC offset using TZ settings + * by Robert Widmer <[EMAIL PROTECTED]> */ *************** *** 18,29 **** #define MAX_PATH 1024 #endif int main (int argc, char **argv) { char buf[BUFSIZE], buf2[MAX_PATH], errbuf[ERRMSGSZ]; time_t tLogEnd = 0, tRotation; int nLogFD = -1, nLogFDprev = -1, nMessCount = 0, nRead, nWrite; ! int utc_offset = 0; int use_strftime = 0; time_t now; char *szLogRoot; --- 21,43 ---- #define MAX_PATH 1024 #endif + /* RW: return current locale UTC offset */ + int local_offset (void) + { + time_t now = time(NULL); + struct tm *local_tm = localtime(&now); + struct tm *gm_tm = gmtime(&now); + time_t local_t = mktime(local_tm); + time_t gm_t = mktime(gm_tm); + return (local_t - gm_t); + } + int main (int argc, char **argv) { char buf[BUFSIZE], buf2[MAX_PATH], errbuf[ERRMSGSZ]; time_t tLogEnd = 0, tRotation; int nLogFD = -1, nLogFDprev = -1, nMessCount = 0, nRead, nWrite; ! int utc_offset = 0, use_TZ = 0; int use_strftime = 0; time_t now; char *szLogRoot; *************** *** 54,65 **** "starts (N.B. this time will always be a\nmultiple of the " "rotation time, so you can synchronize cron scripts with it).\n" "At the end of each rotation time a new log is started.\n"); exit(1); } szLogRoot = argv[1]; if (argc >= 4) { ! utc_offset = atoi(argv[3]) * 60; } tRotation = atoi(argv[2]); if (tRotation <= 0) { --- 68,91 ---- "starts (N.B. this time will always be a\nmultiple of the " "rotation time, so you can synchronize cron scripts with it).\n" "At the end of each rotation time a new log is started.\n"); + + /* RW: additional usage info for the offset parameter*/ + fprintf(stderr, + "\nAn offset value of \"TZ\" will use the TZ settings " + "to calculate the UTC offset.\n"); exit(1); } szLogRoot = argv[1]; if (argc >= 4) { ! /* RW: UTC offset may be a number or the string "TZ" */ ! if (argv[3][0] == 'T') { ! utc_offset = local_offset(); ! use_TZ = 1; ! } ! else { ! utc_offset = atoi(argv[3]) * 60; ! } } tRotation = atoi(argv[2]); if (tRotation <= 0) { *************** *** 82,87 **** --- 108,116 ---- } if (nLogFD < 0) { time_t tLogStart = (now / tRotation) * tRotation; + /* RW: refresh utc offset for the new file */ + if (use_TZ) + utc_offset = local_offset(); if (use_strftime) { struct tm *tm_now; tm_now = gmtime(&tLogStart); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
