1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-17 15:27:36 +00:00

A log file name may now be prefixed by a '-' if it should not be

explicitly fsynced after kernel messages are logged. This option
should be syntax compatible with a similar option in Linux syslogd.

I've made some small changes to Pekka's patch, hoepfully I haven't
goofed anything.

PR:		66790
Submitted by:	Pekka Savola <pekkas@netcore.fi>
Obtained from:	Martin Schulze's syslogd
MFC after:	1 month
This commit is contained in:
David Malone 2004-05-30 10:04:03 +00:00
parent 8b5cd5a662
commit 0f2ffc4e31
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=129865
2 changed files with 32 additions and 2 deletions

View File

@ -318,6 +318,22 @@ There are five forms:
.It .It
A pathname (beginning with a leading slash). A pathname (beginning with a leading slash).
Selected messages are appended to the file. Selected messages are appended to the file.
.Pp
To ensure that kernel messages are written to disk promptly,
.Nm
calls
.Xr fsync 2
after writing messages from the kernel.
Other messages are not synced explicitly.
You may prefix a pathname with the minus sign,
.Dq - ,
to forego syncing the specified file after every kernel message.
Note that you might lose information if the system crashes
immediately following a write attempt.
Nevertheless, using the
.Dq -
option may improve performance,
especially if the kernel is logging many messages.
.It .It
A hostname (preceded by an at A hostname (preceded by an at
.Pq Dq @ .Pq Dq @
@ -422,6 +438,10 @@ security.* /var/log/security
# Log all writes to /dev/console to a separate file. # Log all writes to /dev/console to a separate file.
console.* /var/log/console.log console.* /var/log/console.log
# Log ipfw messages without syncing after every message.
!ipfw
*.* -/var/log/ipfw
.Ed .Ed
.Sh IMPLEMENTATION NOTES .Sh IMPLEMENTATION NOTES
The The

View File

@ -186,6 +186,8 @@ struct filed {
int f_prevlen; /* length of f_prevline */ int f_prevlen; /* length of f_prevline */
int f_prevcount; /* repetition cnt of prevline */ int f_prevcount; /* repetition cnt of prevline */
u_int f_repeatcount; /* number of "repeated" msgs */ u_int f_repeatcount; /* number of "repeated" msgs */
int f_flags; /* file-specific flags */
#define FFLAG_SYNC 0x01
}; };
/* /*
@ -1150,7 +1152,7 @@ fprintlog(struct filed *f, int flags, const char *msg)
f->f_type = F_UNUSED; f->f_type = F_UNUSED;
errno = e; errno = e;
logerror(f->f_un.f_fname); logerror(f->f_un.f_fname);
} else if (flags & SYNC_FILE) } else if ((flags & SYNC_FILE) && (f->f_flags & FFLAG_SYNC))
(void)fsync(f->f_file); (void)fsync(f->f_file);
break; break;
@ -1635,7 +1637,7 @@ static void
cfline(const char *line, struct filed *f, const char *prog, const char *host) cfline(const char *line, struct filed *f, const char *prog, const char *host)
{ {
struct addrinfo hints, *res; struct addrinfo hints, *res;
int error, i, pri; int error, i, pri, syncfile;
const char *p, *q; const char *p, *q;
char *bp; char *bp;
char buf[MAXLINE], ebuf[100]; char buf[MAXLINE], ebuf[100];
@ -1783,6 +1785,12 @@ cfline(const char *line, struct filed *f, const char *prog, const char *host)
while (*p == '\t' || *p == ' ') while (*p == '\t' || *p == ' ')
p++; p++;
if (*p == '-') {
syncfile = 0;
p++;
} else
syncfile = 1;
switch (*p) { switch (*p) {
case '@': case '@':
(void)strlcpy(f->f_un.f_forw.f_hname, ++p, (void)strlcpy(f->f_un.f_forw.f_hname, ++p,
@ -1806,6 +1814,8 @@ cfline(const char *line, struct filed *f, const char *prog, const char *host)
logerror(p); logerror(p);
break; break;
} }
if (syncfile)
f->f_flags |= FFLAG_SYNC;
if (isatty(f->f_file)) { if (isatty(f->f_file)) {
if (strcmp(p, ctty) == 0) if (strcmp(p, ctty) == 0)
f->f_type = F_CONSOLE; f->f_type = F_CONSOLE;