tags 223554 patch thankyou Hi,
I'm willing to implement this feature (== supply a patch), but I'd prefer IRIX' format over RFC 3164 - writing out to the logfiles is no transmission, and having a variable-length field precede the date makes the logfile a lot harder to read. The f/p code itself is not intuitively human-readable anyway, so I think the way IRIX handles it[1] (two characters, first one is priority 0-7, second is facility A-T, both prepended to the hostname, separated from it with a colon) is just fine - you can at least immediately see the priority. I have already prepared a patch[2] to toggle this feature with a global commandline switch - if the distinct control per logfile is desired, I would code that, too. What is your opinion? Regards, Jan [1]: http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=man&fname=/usr/share/catman/a_man/cat1/syslogd.z - near the bottom of the page. [2]: Patch attached, includes manpage changes. Locally tested for 6h now, running smoothly. -- Jan C. Nordholz <jckn At gmx net>
diff -Naur sysklogd-1.4.1/sysklogd.8 sysklogd-1.4.1_new/sysklogd.8
--- sysklogd-1.4.1/sysklogd.8 2001-03-11 20:35:51.000000000 +0100
+++ sysklogd-1.4.1_new/sysklogd.8 2005-11-27 21:09:33.000000000 +0100
@@ -104,6 +104,16 @@
forward any remote messages it receives to forwarding hosts which have been
defined.
.TP
+.B "\-i "
+Make \fBsyslogd\fR include the facility and priority with each logged message.
+The priority is encoded as a one-digit number (ranging from 0 to 7; see
+.BR syslog (2)
+for a complete list), the facility as a capital character (starting
+with ``A'' for LOG_KERN - see
+.I /usr/include/sys/syslog.h
+for their order).
+These two bytes are prepended to the hostname, separated from it by a colon.
+.TP
.BI "\-l " "hostlist"
Specify a hostname that should be logged only with its simple hostname
and not the fqdn. Multiple hosts may be specified using the colon
diff -Naur sysklogd-1.4.1/syslogd.c sysklogd-1.4.1_new/syslogd.c
--- sysklogd-1.4.1/syslogd.c 2005-11-27 19:38:18.000000000 +0100
+++ sysklogd-1.4.1_new/syslogd.c 2005-11-27 21:22:38.000000000 +0100
@@ -735,6 +735,8 @@
char **LocalHosts = NULL; /* these hosts are logged with their hostname */
int NoHops = 1; /* Can we bounce syslog messages through an
intermediate host. */
+int IncludePriFac = 0; /* Whether facility and priority shall be
included
+ in log messages */
extern int errno;
@@ -747,7 +749,7 @@
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 pri, int flags, char
*msg);
void endtty();
void wallmsg(register struct filed *f, struct iovec *iov);
void reapchild();
@@ -829,7 +831,7 @@
funix[i] = -1;
}
- while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF)
+ while ((ch = getopt(argc, argv, "a:dhif:l:m:np:rs:v")) != EOF)
switch((char)ch) {
case 'a':
if (nfunix < MAXFUNIX)
@@ -846,6 +848,9 @@
case 'h':
NoHops = 0;
break;
+ case 'i':
+ IncludePriFac = 1;
+ break;
case 'l':
if (LocalHosts) {
fprintf (stderr, "Only one -l argument
allowed," \
@@ -1613,7 +1618,7 @@
if (f->f_file >= 0) {
untty();
- fprintlog(f, (char *)from, flags, msg);
+ fprintlog(f, (char *)from, pri, flags, msg);
(void) close(f->f_file);
f->f_file = -1;
}
@@ -1663,13 +1668,13 @@
* in the future.
*/
if (now > REPEATTIME(f)) {
- fprintlog(f, (char *)from, flags, (char *)NULL);
+ fprintlog(f, (char *)from, pri, flags, (char
*)NULL);
BACKOFF(f);
}
} else {
/* new line, save it */
if (f->f_prevcount)
- fprintlog(f, (char *)from, 0, (char *)NULL);
+ fprintlog(f, (char *)from, f->f_prevpri, 0,
(char *)NULL);
f->f_prevpri = pri;
f->f_repeatcount = 0;
(void) strncpy(f->f_lasttime, timestamp, 15);
@@ -1678,11 +1683,11 @@
if (msglen < MAXSVLINE) {
f->f_prevlen = msglen;
(void) strcpy(f->f_prevline, msg);
- fprintlog(f, (char *)from, flags, (char *)NULL);
+ fprintlog(f, (char *)from, pri, flags, (char
*)NULL);
} else {
f->f_prevline[0] = 0;
f->f_prevlen = 0;
- fprintlog(f, (char *)from, flags, msg);
+ fprintlog(f, (char *)from, pri, flags, msg);
}
}
}
@@ -1698,15 +1703,17 @@
} /* balance parentheses for emacs */
#endif
-void fprintlog(f, from, flags, msg)
+void fprintlog(f, from, pri, flags, msg)
register struct filed *f;
char *from;
+ int pri;
int flags;
char *msg;
{
- struct iovec iov[6];
+ struct iovec iov[7];
register struct iovec *v = iov;
char repbuf[80];
+ char priostring[3];
#ifdef SYSLOG_INET
register int l;
char line[MAXLINE + 1];
@@ -1722,6 +1729,17 @@
v->iov_base = " ";
v->iov_len = 1;
v++;
+ if (IncludePriFac == 1) {
+ priostring[0]='0' + LOG_PRI(pri);
+ priostring[1]='A' + LOG_FAC(pri);
+ priostring[2]=':';
+ v->iov_base = priostring;
+ v->iov_len = 3;
+ } else {
+ v->iov_base = "";
+ v->iov_len = 0;
+ }
+ v++;
v->iov_base = f->f_prevhost;
v->iov_len = strlen(v->iov_base);
v++;
@@ -1816,7 +1834,7 @@
else {
f->f_time = now;
(void) snprintf(line, sizeof(line), "<%d>%s\n",
f->f_prevpri, \
- (char *) iov[4].iov_base);
+ (char *) iov[5].iov_base);
l = strlen(line);
if (l > MAXLINE)
l = MAXLINE;
@@ -1864,7 +1882,7 @@
if (f->f_file == -1)
break;
- if (writev(f->f_file, iov, 6) < 0) {
+ if (writev(f->f_file, iov, 7) < 0) {
int e = errno;
/* If a named pipe is full, just ignore it for now
@@ -2131,7 +2149,7 @@
dprintf("flush %s: repeated %d times, %d sec.\n",
TypeNames[f->f_type], f->f_prevcount,
repeatinterval[f->f_repeatcount]);
- fprintlog(f, LocalHostName, 0, (char *)NULL);
+ fprintlog(f, LocalHostName, f->f_prevpri, 0, (char
*)NULL);
BACKOFF(f);
}
}
@@ -2186,7 +2204,7 @@
f = &Files[lognum];
/* flush any pending output */
if (f->f_prevcount)
- fprintlog(f, LocalHostName, 0, (char *)NULL);
+ fprintlog(f, LocalHostName, f->f_prevpri, 0, (char
*)NULL);
}
Initialized = was_initialized;
@@ -2272,7 +2290,7 @@
/* flush any pending output */
if (f->f_prevcount)
- fprintlog(f, LocalHostName, 0, (char *)NULL);
+ fprintlog(f, LocalHostName, f->f_prevpri, 0,
(char *)NULL);
switch (f->f_type) {
case F_FILE:
signature.asc
Description: Digital signature

