
Недавно я узнал о /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
возможен, хотя и не такой простой, как вышеприведенныйЦЕЛОВАТЬ-й подход.