/usr/bin/logger の stdout と stderr を「多重化」する

/usr/bin/logger の stdout と stderr を「多重化」する

最近、/usr/bin/logger について知りましたが、非常に優れていると思います。

優先度引数 (-p) (facility.info、facility.alert など) が含まれていることに気付きました。

したがって、stdin のみをログに記録したい場合は、次のようにします。

stuff | logger -p cron.info

stderr のみをログに記録するには、次のようにします。

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

stdout と stderr の両方をログに記録するには:

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

大量のコピー&ペーストを避けるために、これを実行するためのより簡潔な方法があるかどうか疑問に思っています。

代わりにそのようなことを達成する方法はあるでしょうか?

logging -F cron -s info -e err stuff

どうもありがとうございます。

答え1

望ましい構文が

logging cron info err stuff

このような場合は次の関数を使用します。

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
}

ノート:

  • 代わりにスタンドアロン スクリプトを構築することもできます。
  • -F、を解析すること-s-e可能ですが、上記ほど単純ではありません。キス-yアプローチ。

関連情報