Initial support for per log file rotate size:count as last arg.
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
parent
01a46ae8cc
commit
bc92e860ef
@ -696,6 +696,8 @@ struct filed {
|
|||||||
int f_prevcount; /* repetition cnt of prevline */
|
int f_prevcount; /* repetition cnt of prevline */
|
||||||
size_t f_repeatcount; /* number of "repeated" msgs */
|
size_t f_repeatcount; /* number of "repeated" msgs */
|
||||||
int f_flags; /* store some additional flags */
|
int f_flags; /* store some additional flags */
|
||||||
|
int f_rotatecount;
|
||||||
|
int f_rotatesz;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1857,19 +1859,19 @@ void logrotate(struct filed *f)
|
|||||||
{
|
{
|
||||||
struct stat statf;
|
struct stat statf;
|
||||||
|
|
||||||
if (!RotateSz)
|
if (!f->f_rotatesz)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fstat(f->f_file, &statf);
|
fstat(f->f_file, &statf);
|
||||||
/* bug (mostly harmless): can wrap around if file > 4gb */
|
/* bug (mostly harmless): can wrap around if file > 4gb */
|
||||||
if (S_ISREG(statf.st_mode) && statf.st_size > RotateSz) {
|
if (S_ISREG(statf.st_mode) && statf.st_size > f->f_rotatesz) {
|
||||||
if (RotateCnt > 0) { /* always 0..999 */
|
if (f->f_rotatecount > 0) { /* always 0..999 */
|
||||||
int len = strlen(f->f_un.f_fname) + 10 + 1;
|
int len = strlen(f->f_un.f_fname) + 10 + 1;
|
||||||
char oldFile[len];
|
char oldFile[len];
|
||||||
char newFile[len];
|
char newFile[len];
|
||||||
|
|
||||||
/* First age zipped log files */
|
/* First age zipped log files */
|
||||||
for (int i = RotateCnt; i > 1; i--) {
|
for (int i = f->f_rotatecount; i > 1; i--) {
|
||||||
snprintf(oldFile, len, "%s.%d.gz", f->f_un.f_fname, i - 1);
|
snprintf(oldFile, len, "%s.%d.gz", f->f_un.f_fname, i - 1);
|
||||||
snprintf(newFile, len, "%s.%d.gz", f->f_un.f_fname, i);
|
snprintf(newFile, len, "%s.%d.gz", f->f_un.f_fname, i);
|
||||||
|
|
||||||
@ -2769,6 +2771,10 @@ void cfline(char *line, struct filed *f)
|
|||||||
f->f_flags = 0;
|
f->f_flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* default rotate from command line */
|
||||||
|
f->f_rotatecount = RotateCnt;
|
||||||
|
f->f_rotatesz = RotateSz;
|
||||||
|
|
||||||
/* scan through the list of selectors */
|
/* scan through the list of selectors */
|
||||||
for (p = line; *p && *p != '\t' && *p != ' ';) {
|
for (p = line; *p && *p != '\t' && *p != ' ';) {
|
||||||
|
|
||||||
@ -2922,6 +2928,23 @@ void cfline(char *line, struct filed *f)
|
|||||||
|
|
||||||
case '|':
|
case '|':
|
||||||
case '/':
|
case '/':
|
||||||
|
/* Look for optional per-file rotate BYTES:COUNT */
|
||||||
|
for (q = p; !isspace(*q); q++)
|
||||||
|
;
|
||||||
|
if (isspace(*q)) {
|
||||||
|
int sz = 0, cnt = 0;
|
||||||
|
|
||||||
|
*q++ = 0;
|
||||||
|
while (*q == '\t' || *q == ' ')
|
||||||
|
q++;
|
||||||
|
|
||||||
|
sscanf(q, "%d:%d", &sz, &cnt);
|
||||||
|
if (sz > 0 && cnt > 0) {
|
||||||
|
f->f_rotatecount = cnt;
|
||||||
|
f->f_rotatesz = sz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(void)strcpy(f->f_un.f_fname, p);
|
(void)strcpy(f->f_un.f_fname, p);
|
||||||
logit("filename: %s\n", p); /*ASP*/
|
logit("filename: %s\n", p); /*ASP*/
|
||||||
if (syncfile)
|
if (syncfile)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user