Apply by doing:
        cd /usr/src
        patch -p0 < 020_syslog.patch
	cd lib/libc
	make obj
	make clean
	make
	cp /usr/lib/libc.so.23.1 /usr/lib/libc.so.23.1.save
	make install

And then reboot.

Index: lib/libc/gen/syslog.c
===================================================================
RCS file: /cvs/src/lib/libc/gen/syslog.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- lib/libc/gen/syslog.c	1998/03/19 00:30:03	1.8
+++ lib/libc/gen/syslog.c	2000/01/02 23:35:58	1.9
@@ -32,7 +32,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: syslog.c,v 1.8 1998/03/19 00:30:03 millert Exp $";
+static char rcsid[] = "$OpenBSD: syslog.c,v 1.9 2000/01/02 23:35:58 hugh Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/types.h>
@@ -58,12 +58,15 @@
 
 static int	LogFile = -1;		/* fd for log */
 static int	connected;		/* have done connect */
+static int	opened;			/* have done openlog() */
 static int	LogStat = 0;		/* status bits, set by openlog() */
 static const char *LogTag = NULL;	/* string to tag the entry with */
 static int	LogFacility = LOG_USER;	/* default facility code */
 static int	LogMask = 0xff;		/* mask of priorities to be logged */
 extern char	*__progname;		/* Program name, from crt0. */
 
+static void	disconnectlog __P((void)); /* disconnect from syslogd */
+static void	connectlog __P((void));	/* (re)connect to syslogd */
 /*
  * syslog, vsyslog --
  *	print message on log file; output is intended for syslogd(8).
@@ -212,12 +215,22 @@
 	}
 
 	/* Get connected, output the message to the local logger. */
-	if (!connected)
-		openlog(LogTag, LogStat | LOG_NDELAY, 0);
+	if (!opened)
+		openlog(LogTag, LogStat, 0);
+	connectlog();
 	if (send(LogFile, tbuf, cnt, 0) >= 0)
 		return;
 
 	/*
+	 * If the send() failed, the odds are syslogd was restarted.
+	 * Make one (only) attempt to reconnect to /dev/log.
+	 */
+	disconnectlog();
+	connectlog();
+	if (send(LogFile, tbuf, cnt, 0) >= 0)
+		return;
+
+	/*
 	 * Output the message to the console; don't worry about blocking,
 	 * if console blocks everything will.  Make sure the error reported
 	 * is the one from the syslogd failure.
@@ -236,40 +249,62 @@
 	}
 }
 
-static struct sockaddr_un SyslogAddr;	/* AF_UNIX address of local logger */
+static void
+disconnectlog()
+{
+	/*
+	 * If the user closed the FD and opened another in the same slot,
+	 * that's their problem.  They should close it before calling on
+	 * system services.
+	 */
+	if (LogFile != -1) {
+		close(LogFile);
+		LogFile = -1;
+	}
+	connected = 0;		/* retry connect */
+}
 
-void
-openlog(ident, logstat, logfac)
-	const char *ident;
-	int logstat, logfac;
+static void
+connectlog()
 {
-	if (ident != NULL)
-		LogTag = ident;
-	LogStat = logstat;
-	if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0)
-		LogFacility = logfac;
+	struct sockaddr_un SyslogAddr;	/* AF_UNIX address of local logger */
 
 	if (LogFile == -1) {
+		if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+			return;
+		(void)fcntl(LogFile, F_SETFD, 1);
+	}
+	if (LogFile != -1 && !connected) {
 		memset(&SyslogAddr, '\0', sizeof(SyslogAddr));
 		SyslogAddr.sun_len = sizeof(SyslogAddr);
 		SyslogAddr.sun_family = AF_UNIX;
 		(void)strncpy(SyslogAddr.sun_path, _PATH_LOG,
 		    sizeof(SyslogAddr.sun_path) - 1);
 		SyslogAddr.sun_path[sizeof(SyslogAddr.sun_path) - 1] = '\0';
-		if (LogStat & LOG_NDELAY) {
-			if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
-				return;
-			(void)fcntl(LogFile, F_SETFD, 1);
-		}
-	}
-	if (LogFile != -1 && !connected) {
 		if (connect(LogFile, (struct sockaddr *)&SyslogAddr,
-			sizeof(SyslogAddr)) == -1) {
+		    sizeof(SyslogAddr)) == -1) {
 			(void)close(LogFile);
 			LogFile = -1;
 		} else
 			connected = 1;
 	}
+}
+
+void
+openlog(ident, logstat, logfac)
+	const char *ident;
+	int logstat, logfac;
+{
+	if (ident != NULL)
+		LogTag = ident;
+	LogStat = logstat;
+	if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0)
+		LogFacility = logfac;
+
+	if (LogStat & LOG_NDELAY)	/* open immediately */
+		connectlog();
+
+	opened = 1;	/* ident and facility has been set */
 }
 
 void
