Usability, size modifiers to log rotate: 100k:5, 1G:3, and 100M:5
This applies to both the command line '-b SIZE' option and the optional per log file setting. Modifiers supported are: k, M, G Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
parent
98f6f3ae3d
commit
ea24aa5378
@ -116,6 +116,9 @@ per log file, see
|
||||
.BR syslog.conf (5)
|
||||
for details.
|
||||
|
||||
The size argument takes optional modifiers; k, M, G. E.g., 100M is
|
||||
100MB, 42k is 42 kB, etc.
|
||||
|
||||
Default: disabled (0).
|
||||
.TP
|
||||
.BI "\-c " "count"
|
||||
|
@ -336,15 +336,16 @@ and store them in the file
|
||||
.fi
|
||||
.LP
|
||||
The following is almost the same but will also log rotate and compress
|
||||
aged out messages. Notice the leading '-' to ensure the file is flushed
|
||||
to disk after each message.
|
||||
aged out messages. The size argument takes the same modifiers as the
|
||||
command line '-b' option. Notice the leading '-' to ensure the file is
|
||||
flushed to disk after each message.
|
||||
|
||||
.IP
|
||||
.nf
|
||||
# Log all messages, including kernel, to messages file
|
||||
# rotated every 100 kiB and keep up to 10 aged out and
|
||||
# rotated every 100 kB and keep up to 10 aged out and
|
||||
# compressed files.
|
||||
*.*;kern,kern.none -/log/messages 1048576:10
|
||||
*.*;kern,kern.none -/log/messages 100k:10
|
||||
|
||||
.fi
|
||||
.LP
|
||||
|
@ -842,6 +842,7 @@ void die(int sig);
|
||||
void doexit(int sig);
|
||||
#endif
|
||||
void init();
|
||||
static int strtobytes(char *arg);
|
||||
void cfline(char *line, struct filed *f);
|
||||
int decode(char *name, struct code *codetab);
|
||||
static void logit(char *, ...);
|
||||
@ -930,7 +931,7 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
|
||||
case 'b': /* Max file size (bytes) before rotating log file. */
|
||||
RotateSz = atoi(optarg);
|
||||
RotateSz = strtobytes(optarg);
|
||||
break;
|
||||
|
||||
case 'c': /* Number (count) of log files to keep. */
|
||||
@ -2744,6 +2745,35 @@ void init(void)
|
||||
} /* balance parentheses for emacs */
|
||||
#endif
|
||||
|
||||
static int strtobytes(char *arg)
|
||||
{
|
||||
int mod = 0, bytes;
|
||||
size_t pos;
|
||||
|
||||
if (!arg)
|
||||
return -1;
|
||||
|
||||
pos = strspn(arg, "0123456789");
|
||||
if (arg[pos] != 0) {
|
||||
if (arg[pos] == 'G')
|
||||
mod = 3;
|
||||
else if (arg[pos] == 'M')
|
||||
mod = 2;
|
||||
else if (arg[pos] == 'k')
|
||||
mod = 1;
|
||||
else
|
||||
return -1;
|
||||
|
||||
arg[pos] = 0;
|
||||
}
|
||||
|
||||
bytes = atoi(arg);
|
||||
while (mod--)
|
||||
bytes *= 1000;
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* Crack a configuration file line
|
||||
*/
|
||||
@ -2930,16 +2960,23 @@ void cfline(char *line, struct filed *f)
|
||||
case '|':
|
||||
case '/':
|
||||
/* Look for optional per-file rotate BYTES:COUNT */
|
||||
for (q = p; !isspace(*q); q++)
|
||||
for (q = p; *q && !isspace(*q); q++)
|
||||
;
|
||||
if (isspace(*q)) {
|
||||
char *c;
|
||||
int sz = 0, cnt = 0;
|
||||
|
||||
*q++ = 0;
|
||||
while (*q == '\t' || *q == ' ')
|
||||
while (*q && isspace(*q))
|
||||
q++;
|
||||
|
||||
sscanf(q, "%d:%d", &sz, &cnt);
|
||||
c = strchr(q, ':');
|
||||
if (c) {
|
||||
*c++ = 0;
|
||||
cnt = atoi(c);
|
||||
}
|
||||
|
||||
sz = strtobytes(q);
|
||||
if (sz > 0 && cnt > 0) {
|
||||
f->f_rotatecount = cnt;
|
||||
f->f_rotatesz = sz;
|
||||
|
Loading…
Reference in New Issue
Block a user