tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Feed facility/priority to logger(1) via stdin - desirable extension or bad idea?
You wrote:
- Can what I have in mind already be solved (differently or more
elegantly) with existing tools from the base system?
[...]
Anyway, the motivation behind the idea is for the script case that
one can save calling a new logger process for each individual line
to be output.
Since a) logger(1) can read input from stdin and b) there are a limited
no. of facilities and levels, you can just start logger(1) processes for
each unique facility.level and keep them around feeding them input.
This work for you?:
```
#!/usr/bin/awk -f
BEGIN {
LVL[0] = "emerg"
LVL[1] = "alert"
LVL[2] = "crit"
LVL[3] = "err"
LVL[4] = "warning"
LVL[5] = "notice"
LVL[6] = "info"
LVL[7] = "debug"
FAC[0] = "kern"
FAC[1] = "user"
FAC[2] = "mail"
FAC[3] = "daemon"
FAC[4] = "auth"
FAC[5] = "syslog"
FAC[6] = "lpr"
FAC[7] = "news"
FAC[8] = "uucp"
FAC[9] = "cron"
FAC[10] = "authpriv"
FAC[11] = "ftp"
FAC[12] = "ntp"
FAC[13] = "security"
FAC[14] = "console"
FAC[16] = "local0"
FAC[17] = "local1"
FAC[18] = "local2"
FAC[19] = "local3"
FAC[20] = "local4"
FAC[21] = "local5"
FAC[22] = "local6"
FAC[23] = "local7"
DEFPRIO = "user.notice"
}
function getprio(msg, start, len, i, f, l)
{
i = int(substr(msg, start+1, len-2))
f = int(i / 8) # extract facility
l = i - (f * 8) # " level
return FAC[f] "." LVL[l]
}
function logit(prio, msg)
{
proc = "logger -p " prio
if (!(proc in PROCS))
PROCS[proc] = proc
print msg | PROCS[proc]
}
{
s = $0
if (match(s, "<[[:digit:]]+>")) {
prio = getprio(s, RSTART, RLENGTH)
s = substr(s, RSTART + RLENGTH)
} else
prio = DEFPRIO
logit(prio, s)
}
END {
for (proc in PROCS)
close(PROCS[proc])
}
```
Input is of the form:
<134>message line...
as described in the Linux logger(1) man-page (if I've got it right).
-RVP
Home |
Main Index |
Thread Index |
Old Index