Module Name: src Committed By: roy Date: Wed Mar 22 17:52:37 UTC 2017
Modified Files: src/lib/libc/gen: syslog.3 xsyslog.c src/sys/sys: syslog.h Log Message: openlog(3): add LOG_PTRIM and LOG_NLOG log options. syslog(3) is the one stop method of logging system events and diagnostics. When debugging a daemon in the foreground on a terminal, each line is prefixed with tag[pid]: which is very repetative and can take up valuable screen estate. LOG_PTRIM solves this by removing this prefix from stderr output. There is also the case where the debugging could involve a dry-run and syslog(3) calls would pollute the system log with incorrect data. LOG_NLOG solves this by not writing the the system log, but allowing LOG_PERROR to operate as before. Initially discussed here: https://mail-index.netbsd.org/tech-userlevel/2016/10/06/msg010330.html To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/lib/libc/gen/syslog.3 cvs rdiff -u -r1.2 -r1.3 src/lib/libc/gen/xsyslog.c cvs rdiff -u -r1.40 -r1.41 src/sys/sys/syslog.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/gen/syslog.3 diff -u src/lib/libc/gen/syslog.3:1.30 src/lib/libc/gen/syslog.3:1.31 --- src/lib/libc/gen/syslog.3:1.30 Tue Feb 21 18:22:15 2017 +++ src/lib/libc/gen/syslog.3 Wed Mar 22 17:52:36 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: syslog.3,v 1.30 2017/02/21 18:22:15 abhinav Exp $ +.\" $NetBSD: syslog.3,v 1.31 2017/03/22 17:52:36 roy Exp $ .\" $OpenBSD: syslog.3,v 1.25 2005/07/22 03:16:58 jaredy Exp $ .\" .\" Copyright (c) 1985, 1991, 1993 @@ -30,7 +30,7 @@ .\" .\" @(#)syslog.3 8.1 (Berkeley) 6/4/93 .\" -.Dd May 3, 2010 +.Dd March 22, 2017 .Dt SYSLOG 3 .Os .Sh NAME @@ -295,6 +295,10 @@ immediately. Normally the open is delayed until the first message is logged. Useful for programs that need to manage the order in which file descriptors are allocated. +.It Dv LOG_NLOG +Stops syslog from writing to the system log. +Only useful with +.Dv LOG_PERROR . .It Dv LOG_PERROR Write the message to standard error output as well to the system log. .It Dv LOG_PID @@ -302,6 +306,9 @@ Log the process id with each message: us instantiations of daemons. (This PID is placed within brackets between the ident and the message.) +.It Dv LOG_PTRIM +Trim anything syslog added to the message before writing to +standard error output. .El .Pp The Index: src/lib/libc/gen/xsyslog.c diff -u src/lib/libc/gen/xsyslog.c:1.2 src/lib/libc/gen/xsyslog.c:1.3 --- src/lib/libc/gen/xsyslog.c:1.2 Thu Jan 12 01:58:39 2017 +++ src/lib/libc/gen/xsyslog.c Wed Mar 22 17:52:36 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: xsyslog.c,v 1.2 2017/01/12 01:58:39 christos Exp $ */ +/* $NetBSD: xsyslog.c,v 1.3 2017/03/22 17:52:36 roy Exp $ */ /* * Copyright (c) 1983, 1988, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)syslog.c 8.5 (Berkeley) 4/29/95"; #else -__RCSID("$NetBSD: xsyslog.c,v 1.2 2017/01/12 01:58:39 christos Exp $"); +__RCSID("$NetBSD: xsyslog.c,v 1.3 2017/03/22 17:52:36 roy Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -301,11 +301,24 @@ _vxsyslogp_r(int pri, struct syslog_fun /* Output to stderr if requested. */ if (data->log_stat & LOG_PERROR) { + struct iovec *piov; + int piovcnt; + iov[iovcnt].iov_base = __UNCONST(CRLF + 1); iov[iovcnt].iov_len = 1; - (void)writev(STDERR_FILENO, iov, iovcnt + 1); + if (data->log_stat & LOG_PTRIM) { + piov = &iov[iovcnt - 1]; + piovcnt = 2; + } else { + piov = iov; + piovcnt = iovcnt + 1; + } + (void)writev(STDERR_FILENO, piov, piovcnt); } + if (data->log_stat & LOG_NLOG) + goto out; + /* Get connected, output the message to the local logger. */ (*fun->lock)(data); opened = !data->log_opened; @@ -345,6 +358,7 @@ _vxsyslogp_r(int pri, struct syslog_fun (void)close(fd); } +out: if (!(*fun->unlock)(data) && opened) _closelog_unlocked_r(data); } Index: src/sys/sys/syslog.h diff -u src/sys/sys/syslog.h:1.40 src/sys/sys/syslog.h:1.41 --- src/sys/sys/syslog.h:1.40 Tue Mar 21 11:54:46 2017 +++ src/sys/sys/syslog.h Wed Mar 22 17:52:36 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: syslog.h,v 1.40 2017/03/21 11:54:46 roy Exp $ */ +/* $NetBSD: syslog.h,v 1.41 2017/03/22 17:52:36 roy Exp $ */ /* * Copyright (c) 1982, 1986, 1988, 1993 @@ -168,6 +168,8 @@ CODE facilitynames[] = { #define LOG_NDELAY 0x08 /* don't delay open */ #define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */ #define LOG_PERROR 0x20 /* log to stderr as well */ +#define LOG_PTRIM 0x40 /* trim tag and pid from messages to stderr */ +#define LOG_NLOG 0x80 /* don't write to the system log */ #ifndef _KERNEL