--- sysklogd.8 | 23 +++++++++++++++++++++++ syslogd.c | 54 ++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 61 insertions(+), 16 deletions(-) --- sysklogd.8 +++ sysklogd.8 2022-10-14 13:33:28.961599858 +0000 @@ -31,6 +31,7 @@ sysklogd \- Linux system logging utiliti ] .RB [ " \-t " ] .RB [ " \-v " ] +.RB [ " \-S " ] .SH DESCRIPTION .B Sysklogd provides two system utilities which provide support for @@ -158,6 +159,28 @@ loghost. .TP .B "\-v" Print version and exit. +.TP +.B "\-S" +Insert a special code before the hostname in each message to indicate the +message's priority and facility. Having the priority and facility encoded in +each message allows a log analyzer program to monitor a single file +containing all logged messages. The analyzer program can parse the +priority/facility code for each logged message to determine if it is +of interest. + +The priority/facility code takes the form of a priority number +followed by a letter that indicates the facility. The priority number +can range from 0 to 7. The facility letter can range from 'A' to 'Y', +where 'A' corresponds to facility number zero (LOG_KERN), 'B' +corresponds to facility 1 (LOG_USER), etc. +See /usr/include/sys/syslog.h for a list of priority and LOG_xxx codes. + +Example: + + Jun 27 19:22:20 5Q:silence test[1966]: testing + +The above message contains a priority/facility code of '5Q', which breaks +down to a priority of 5 (LOG_NOTICE) and a facility of 16 (LOG_LOCAL0). .SH SIGNALS .B Syslogd reacts to a set of signals. You may easily send a signal to --- syslogd.c +++ syslogd.c 2022-10-14 13:27:33.395957312 +0000 @@ -649,6 +649,9 @@ int funix[MAXFUNIX] = { -1, }; #define SYNC_FILE 0x002 /* do fsync on file after printing */ #define ADDDATE 0x004 /* add a date to the message */ #define MARK 0x008 /* this message is a mark */ +#define SHOWPRI 0x010 /* Will craft priFac before hostname */ + +int showpri = 0; /* Are we showing priority in message ? Default: no */ /* * This table contains plain text for h_errno errors used by the @@ -828,7 +831,7 @@ void printchopped(const char *hname, cha void printline(const char *hname, char *msg); void printsys(char *msg); void logmsg(int pri, char *msg, const char *from, int flags); -void fprintlog(register struct filed *f, char *from, int flags, char *msg); +void fprintlog(register struct filed *f, char *from, int flags, char *msg, ...); void endtty(); void wallmsg(register struct filed *f, struct iovec *iov); void reapchild(); @@ -920,7 +923,7 @@ int main(argc, argv) funix[i] = -1; } - while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:tv")) != EOF) + while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:tvS")) != EOF) switch((char)ch) { case 'a': if (nfunix < MAXFUNIX) @@ -972,6 +975,9 @@ int main(argc, argv) case 'v': printf("syslogd %s.%s\n", VERSION, PATCHLEVEL); exit (0); + case 'S': + showpri++; + break; case '?': default: usage(); @@ -1287,7 +1293,7 @@ int main(argc, argv) int usage() { - fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \ + fprintf(stderr, "usage: syslogd [-drvSh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \ " [-s domainlist] [-f conffile]\n"); exit(1); } @@ -1755,7 +1761,7 @@ void logmsg(pri, msg, from, flags) if (f->f_file >= 0) { untty(); - fprintlog(f, (char *)from, flags, msg); + fprintlog(f, (char *)from, flags|SHOWPRI, msg, prilev, fac); (void) close(f->f_file); f->f_file = -1; } @@ -1805,13 +1811,13 @@ void logmsg(pri, msg, from, flags) * in the future. */ if (now > REPEATTIME(f)) { - fprintlog(f, (char *)from, flags, (char *)NULL); + fprintlog(f, (char *)from, flags|SHOWPRI, (char *)NULL, prilev, fac); BACKOFF(f); } } else { /* new line, save it */ if (f->f_prevcount) - fprintlog(f, (char *)from, 0, (char *)NULL); + fprintlog(f, (char *)from, 0|SHOWPRI, (char *)NULL, prilev, fac); f->f_prevpri = pri; f->f_repeatcount = 0; (void) strncpy(f->f_lasttime, timestamp, 15); @@ -1820,11 +1826,11 @@ void logmsg(pri, msg, from, flags) if (msglen < MAXSVLINE) { f->f_prevlen = msglen; (void) strcpy(f->f_prevline, msg); - fprintlog(f, (char *)from, flags, (char *)NULL); + fprintlog(f, (char *)from, flags|SHOWPRI, (char *)NULL, prilev, fac); } else { f->f_prevline[0] = 0; f->f_prevlen = 0; - fprintlog(f, (char *)from, flags, msg); + fprintlog(f, (char *)from, flags|SHOWPRI, msg, prilev, fac); } } } @@ -1840,11 +1846,7 @@ void logmsg(pri, msg, from, flags) } /* balance parentheses for emacs */ #endif -void fprintlog(f, from, flags, msg) - register struct filed *f; - char *from; - int flags; - char *msg; +void fprintlog(register struct filed *f, char *from, int flags,char *msg, ...) { struct iovec iov[6]; register struct iovec *v = iov; @@ -1865,9 +1867,29 @@ void fprintlog(f, from, flags, msg) v->iov_base = f->f_lasttime; v->iov_len = 15; v++; - v->iov_base = " "; - v->iov_len = 1; - v++; + + if(showpri && (flags & SHOWPRI) ) { + va_list ap; + int prilev; + int fac; + char prilev_char[5]; + const char fac_string[LOG_NFACILITIES+1]="ABCDEFGHIJKLMNOPQRSTUVWXY"; + + va_start(ap,msg); + prilev=va_arg(ap,int); + fac=va_arg(ap,int); + va_end(ap); + sprintf(prilev_char, " %1d%c:", prilev, fac_string[fac]); + v->iov_base = prilev_char; + v->iov_len = 4; + v++; + } + else { + v->iov_base = " "; + v->iov_len = 1; + v++; + } + v->iov_base = f->f_prevhost; v->iov_len = strlen(v->iov_base); v++;