Attached is a patch which replaces the 'log_filename_prefix' configuration
directive with a similar 'log_filename' directive. It differs from the
former in the following ways:
+ allows embedded strftime() escapes ala Apache's rotatelogs;
+ eliminates hard-coded embedding of the postmaster pid;
+ makes the current hard-coded timestamp configurable;
+ changes the default log filename to exclude the PID;
This patch enables us to continue using our existing log-handling utilities
and filenaming conventions which we now use with Apache's rotatelogs.
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/runtime.sgml,v
retrieving revision 1.279
diff -C1 -r1.279 runtime.sgml
*** doc/src/sgml/runtime.sgml 24 Aug 2004 00:06:50 -0000 1.279
--- doc/src/sgml/runtime.sgml 27 Aug 2004 17:37:09 -0000
***************
*** 1927,1930 ****
! <varlistentry id="guc-log-filename-prefix" xreflabel="log_filename_prefix">
! <term><varname>log_filename_prefix</varname> (<type>string</type>)</term>
<listitem>
--- 1927,1930 ----
! <varlistentry id="guc-log-filename" xreflabel="log_filename">
! <term><varname>log_filename</varname> (<type>string</type>)</term>
<listitem>
***************
*** 1932,1936 ****
When <varname>redirect_stderr</> is enabled, this option
! sets the prefix of the file names of the created log files.
! The postmaster PID and the current time are appended to this
! prefix to form an exact log file name.
This option can only be set at server start or in the
--- 1932,1935 ----
When <varname>redirect_stderr</> is enabled, this option
! sets the name of the created log files. Any embedded
! strftime escapes sequences are interpolated per strftime().
This option can only be set at server start or in the
Index: src/backend/postmaster/syslogger.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/postmaster/syslogger.c,v
retrieving revision 1.5
diff -C1 -r1.5 syslogger.c
*** src/backend/postmaster/syslogger.c 9 Aug 2004 20:28:48 -0000 1.5
--- src/backend/postmaster/syslogger.c 27 Aug 2004 17:37:11 -0000
***************
*** 64,66 ****
char * Log_directory = "pg_log";
! char * Log_filename_prefix = "postgresql-";
--- 64,66 ----
char * Log_directory = "pg_log";
! char * Log_filename = "postgresql-%Y-%m-%d_%H%M%S.log";
***************
*** 122,123 ****
--- 122,124 ----
char currentLogDir[MAXPGPATH];
+ char currentLogFilename[MAXPGPATH];
***************
*** 219,222 ****
last_rotation_time = time(NULL);
! /* remember active logfile directory */
strncpy(currentLogDir, Log_directory, MAXPGPATH);
--- 220,224 ----
last_rotation_time = time(NULL);
! /* remember active logfile directory and filename */
strncpy(currentLogDir, Log_directory, MAXPGPATH);
+ strncpy(currentLogFilename, Log_filename, MAXPGPATH);
***************
*** 240,247 ****
/*
! * Check if the log directory changed in postgresql.conf. If so,
! * force rotation to make sure we're writing the logfiles in the
! * right place.
! *
! * XXX is it worth responding similarly to a change of
! * Log_filename_prefix?
*/
--- 242,246 ----
/*
! * Check if the log directory or filename prefix changed in
! * postgresql.conf. If so, force rotation to make sure we're
! * writing the logfiles in the right place.
*/
***************
*** 252,253 ****
--- 251,257 ----
}
+ if (strncmp(Log_filename, currentLogFilename, MAXPGPATH) != 0)
+ {
+ strncpy(currentLogFilename, Log_filename, MAXPGPATH);
+ rotation_requested = true;
+ }
}
***************
*** 791,796 ****
char *filename;
! char stamptext[128];
!
! pg_strftime(stamptext, sizeof(stamptext), "%Y-%m-%d_%H%M%S",
! pg_localtime(×tamp));
--- 795,797 ----
char *filename;
! int len;
***************
*** 799,807 ****
if (is_absolute_path(Log_directory))
! snprintf(filename, MAXPGPATH, "%s/%s%05u_%s.log",
! Log_directory, Log_filename_prefix,
! (unsigned int) PostmasterPid, stamptext);
else
! snprintf(filename, MAXPGPATH, "%s/%s/%s%05u_%s.log",
! DataDir, Log_directory, Log_filename_prefix,
! (unsigned int) PostmasterPid, stamptext);
--- 800,815 ----
if (is_absolute_path(Log_directory))
! snprintf(filename, MAXPGPATH, "%s/", Log_directory);
else
! snprintf(filename, MAXPGPATH, "%s/%s/", DataDir, Log_directory);
!
! len = strnlen(filename, MAXPGPATH);
!
! /* use strftime() if there are embedded % escape sequences */
! if ( strstr(Log_filename, "%") != NULL ) {
! struct pg_tm *now;
! now = pg_gmtime(×tamp);
! pg_strftime((char*) (filename + len), MAXPGPATH - len, Log_filename, now);
! }
! else
! snprintf((char*) (filename + len), MAXPGPATH - len, "%s", Log_filename);
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v
retrieving revision 1.232
diff -C1 -r1.232 guc.c
*** src/backend/utils/misc/guc.c 16 Aug 2004 02:12:29 -0000 1.232
--- src/backend/utils/misc/guc.c 27 Aug 2004 17:37:18 -0000
***************
*** 1674,1676 ****
{
! {"log_filename_prefix", PGC_SIGHUP, LOGGING_WHERE,
gettext_noop("Prefix for file names created in the log_directory."),
--- 1674,1676 ----
{
! {"log_filename", PGC_SIGHUP, LOGGING_WHERE,
gettext_noop("Prefix for file names created in the log_directory."),
***************
*** 1678,1681 ****
},
! &Log_filename_prefix,
! "postgresql-", NULL, NULL
},
--- 1678,1681 ----
},
! &Log_filename,
! "postgresql-%Y-%m-%d_%H%M%S.log", NULL, NULL
},
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.126
diff -C1 -r1.126 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample 12 Aug 2004 19:03:36 -0000 1.126
--- src/backend/utils/misc/postgresql.conf.sample 27 Aug 2004 17:37:18 -0000
***************
*** 175,177 ****
# May be specified absolute or relative to PGDATA
! #log_filename_prefix = 'postgresql_' # Prefix for logfile names.
#log_rotation_age = 1440 # Automatic rotation of logfiles will happen after
--- 175,178 ----
# May be specified absolute or relative to PGDATA
! #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # Logfile name, may include
! # strftime() escapes
#log_rotation_age = 1440 # Automatic rotation of logfiles will happen after
Index: src/include/postmaster/syslogger.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/postmaster/syslogger.h,v
retrieving revision 1.1
diff -C1 -r1.1 syslogger.h
*** src/include/postmaster/syslogger.h 5 Aug 2004 23:32:12 -0000 1.1
--- src/include/postmaster/syslogger.h 27 Aug 2004 17:37:19 -0000
***************
*** 19,21 ****
extern char *Log_directory;
! extern char *Log_filename_prefix;
--- 19,21 ----
extern char *Log_directory;
! extern char *Log_filename;
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
http://archives.postgresql.org