tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Feed facility/priority to logger(1) via stdin - desirable extension or bad idea?
Hello all,
following a short discussion on IRC, I would like to ask a question or
make a suggestion.
With a lot of scripts and tools written, I have gotten into the habit of
logging all logging output to stderr, as well as any form of payload to
stdout. To change the logging destination depending on the operating
environment, I just have to connect stderr to the desired logging tool
at the end of the pipeline. In my scripts and tools, on the other hand,
I don't have to worry about the logging target at all, but can work as
neutrally as possible. This is similarly recommended in the environment
of 12F apps[1].
In my productive NetBSD environments, this logging tool is then usually
logger(1), which is at the end of the pipeline and sends the output to
syslogd.
logger(1) takes a parameter -p, which I can use to set the facility and
the priority. This is where it starts to get a bit uncomfortable. I have
no ability to influence the facility / priority on the other side of the
pipeline. This means that I lose the capabilities of Syslogd, e.g. to
use different log files depending on the priority.
It would be nice if one could, for example, optionally omit the -p
parameter and instead specify the facility and priority via the standard
input of logger in coded form (coded with angle brackets as in the raw
syslog protocol) *)
In /usr.bin/logger/logger.c there is a TODO in the else path of command
line processing (chosen when no command line parameters are provided)
which mirrors pretty much that idea:
```
} else /* TODO: allow syslog-protocol messages from file/stdin
* but that will require parsing the line to split
* it into three fields.
*/
while (fgets(buf, sizeof(buf), stdin) != NULL)
syslogp(pri, msgid, sd, "%s", buf);
```
In other implementations of logger (under [2], for example, the Linux
variant), there is a --prio-prefix parameter that explicitly enables
this type of handling.
My question on this:
- With reference to the TODO - would that be a welcome addition? If yes,
what should be paid particular attention to?
- Can what I have in mind already be solved (differently or more
elegantly) with existing tools from the base system?
Kind regards
Matthias
*) You could then decide in your scripts, depending on whether stderr is
connected to a terminal or a pipe, whether you want to output nice
coloured terminal logging or logging optimised for syslog with a prefix
[1] https://12factor.net/logs
[2] https://man7.org/linux/man-pages/man1/logger.1.html
Home |
Main Index |
Thread Index |
Old Index