Blob Blame History Raw
Index: logrotate.c
===================================================================
--- logrotate.c	(revision 336)
+++ logrotate.c	(working copy)
@@ -786,6 +786,8 @@
 	}
 	if (log->minsize && sb.st_size < log->minsize)
 	    state->doRotate = 0;
+	if (log->maxsize && sb.st_size > log->maxsize)
+	    state->doRotate = 1;
     }
 
     /* The notifempty flag overrides the normal criteria */
@@ -1465,6 +1467,9 @@
     if (log->minsize) 
 	message(MESS_DEBUG, "only log files >= %llu bytes are rotated, ",	log->minsize);
 
+    if (log->maxsize) 
+	message(MESS_DEBUG, "log files >= %llu are rotated earlier, ",	log->minsize);
+
     if (log->logAddress) {
 	message(MESS_DEBUG, "old logs mailed to %s\n", log->logAddress);
     } else {
Index: logrotate.h
===================================================================
--- logrotate.h	(revision 336)
+++ logrotate.h	(working copy)
@@ -36,6 +36,7 @@
     enum { ROT_DAYS, ROT_WEEKLY, ROT_MONTHLY, ROT_YEARLY, ROT_SIZE,
 	    ROT_FORCE } criterium;
     unsigned long long threshhold;
+	unsigned long long maxsize;
     unsigned long long minsize;
     int rotateCount;
     int rotateAge;
Index: config.c
===================================================================
--- config.c	(revision 336)
+++ config.c	(working copy)
@@ -290,6 +290,7 @@
     to->criterium = from->criterium;
     to->threshhold = from->threshhold;
     to->minsize = from->minsize;
+	to->maxsize = from->maxsize;
     to->rotateCount = from->rotateCount;
     to->rotateAge = from->rotateAge;
     to->logStart = from->logStart;
@@ -504,6 +505,7 @@
 		.criterium = ROT_SIZE,
 		.threshhold = 1024 * 1024,
 		.minsize = 0,
+		.maxsize = 0,
 		.rotateCount = 0,
 		.rotateAge = 0,
 		.logStart = -1,
@@ -885,7 +887,8 @@
 					newlog->flags |= LOG_FLAG_CREATE;
 				} else if (!strcmp(key, "nocreate")) {
 					newlog->flags &= ~LOG_FLAG_CREATE;
-				} else if (!strcmp(key, "size") || !strcmp(key, "minsize")) {
+				} else if (!strcmp(key, "size") || !strcmp(key, "minsize") ||
+							!strcmp(key, "maxsize")) {
 					unsigned long long size = 0;
 					char *opt = key;
 							
@@ -930,6 +933,8 @@
 						if (!strncmp(opt, "size", 4)) {
 						  newlog->criterium = ROT_SIZE;
 						  newlog->threshhold = size;
+						} else if (!strncmp(opt, "maxsize", 7)) {
+						  newlog->maxsize = size;
 						} else {
 						  newlog->minsize = size;
 						}
Index: logrotate.8
===================================================================
--- logrotate.8	(revision 336)
+++ logrotate.8	(working copy)
@@ -285,7 +285,17 @@
 configured address if \fBmaillast\fR and \fBmail\fR are configured.
 
 .TP
-\fBminsize\fR \fIsize\fR
+\fBmaxsize\fR \fIsize\fR
+Log files are rotated when they grow bigger than \fIsize\fR bytes even
+before the additionally specified time interval (\fBdaily\fR, \fBweekly\fR,
+\fBmonthly\fR, or \fByearly\fR).  The related \fBsize\fR option is similar
+except that it is mutually exclusive with the time interval options, and it
+causes log files to be rotated without regard for the last rotation time.
+When \fBmaxsize\fR is used, both the size and timestamp of a log file are
+considered.
+
+.TP
+\fBminsize\fR  \fIsize\fR
 Log files are rotated when they grow bigger than \fIsize\fR bytes, but not
 before the additionally specified time interval (\fBdaily\fR, \fBweekly\fR,
 \fBmonthly\fR, or \fByearly\fR).  The related \fBsize\fR option is similar