"Multiplexen" von stdout und stderr in /usr/bin/logger

"Multiplexen" von stdout und stderr in /usr/bin/logger

Ich habe vor Kurzem von /usr/bin/logger erfahren und finde es sehr gut.

Mir ist aufgefallen, dass es ein Prioritätsargument (-p) enthält (facility.info, facility.alert usw.).

Wenn ich also nur über die Standardeingabe protokollieren möchte, mache ich das folgendermaßen:

stuff | logger -p cron.info

So protokollieren Sie nur stderr:

stuff 2>&1 > /dev/null | logger -p cron.err

So protokollieren Sie sowohl stdout als auch stderr:

stuff 2> >(logger -p cron.err) | logger -p cron.info

Ich frage mich, ob es eine prägnantere Möglichkeit gibt, dies zu tun, um viel Kopieren und Einfügen zu vermeiden.

Gibt es stattdessen eine Möglichkeit, solche Dinge zu erreichen?

logging -F cron -s info -e err stuff

Vielen Dank

Antwort1

Dies wäre recht einfach, wenn die gewünschte Syntax wäre

logging cron info err stuff

Verwenden Sie in diesem Fall die folgende Funktion:

logging() {
    if [ "$#" -lt 4 ]; then
        echo "Too few arguments." >&2
        return 1
    else
        local prefix postfix1 postfix2
        prefix="$1"
        postfix1="$2"
        postfix2="$3"
        shift 3
        "$@" 2> >(logger -p "$prefix.$postfix2") | logger -p "$prefix.$postfix1"
    fi
}

Anmerkungen:

  • Sie können stattdessen ein eigenständiges Skript erstellen.
  • Das Parsen von -F, -s, -eist möglich, wenn auch nicht so einfach wie obenKUSS-y-Ansatz.

verwandte Informationen