summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authordwmalone <dwmalone@FreeBSD.org>2004-05-30 10:04:03 +0000
committerdwmalone <dwmalone@FreeBSD.org>2004-05-30 10:04:03 +0000
commit21f82f995bfaa3cea3aeb4f282a686d71c359e33 (patch)
treeffa6fc06a3ed125ed44b1ae1276c540f6577a600 /usr.sbin
parent46d384e689b20d4fa11d4c6051b9fc07ed51f6a7 (diff)
downloadFreeBSD-src-21f82f995bfaa3cea3aeb4f282a686d71c359e33.zip
FreeBSD-src-21f82f995bfaa3cea3aeb4f282a686d71c359e33.tar.gz
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
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/syslogd/syslog.conf.520
-rw-r--r--usr.sbin/syslogd/syslogd.c14
2 files changed, 32 insertions, 2 deletions
diff --git a/usr.sbin/syslogd/syslog.conf.5 b/usr.sbin/syslogd/syslog.conf.5
index f13f1bf..789d63f 100644
--- a/usr.sbin/syslogd/syslog.conf.5
+++ b/usr.sbin/syslogd/syslog.conf.5
@@ -318,6 +318,22 @@ There are five forms:
.It
A pathname (beginning with a leading slash).
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
A hostname (preceded by an at
.Pq Dq @
@@ -422,6 +438,10 @@ security.* /var/log/security
# Log all writes to /dev/console to a separate file.
console.* /var/log/console.log
+
+# Log ipfw messages without syncing after every message.
+!ipfw
+*.* -/var/log/ipfw
.Ed
.Sh IMPLEMENTATION NOTES
The
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index a6b3e42..44b8795 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -186,6 +186,8 @@ struct filed {
int f_prevlen; /* length of f_prevline */
int f_prevcount; /* repetition cnt of prevline */
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;
errno = e;
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);
break;
@@ -1635,7 +1637,7 @@ static void
cfline(const char *line, struct filed *f, const char *prog, const char *host)
{
struct addrinfo hints, *res;
- int error, i, pri;
+ int error, i, pri, syncfile;
const char *p, *q;
char *bp;
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 == ' ')
p++;
+ if (*p == '-') {
+ syncfile = 0;
+ p++;
+ } else
+ syncfile = 1;
+
switch (*p) {
case '@':
(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);
break;
}
+ if (syncfile)
+ f->f_flags |= FFLAG_SYNC;
if (isatty(f->f_file)) {
if (strcmp(p, ctty) == 0)
f->f_type = F_CONSOLE;
OpenPOWER on IntegriCloud