Большинство скриптов просто пишут все в stdout или stderr. Но bash позволяет делать полноценный логгер, разделяя потоки по уровням и управлять ими динамически во время выполнения.
Для этого, выделяем отдельные файловые дескрипторы:
3> - INFO
4> - DEBUG
5> - ERROR
Каждый можно направить в свой файл или устройство.
▪️ Базовая инициализация логгеров
LOGLEVEL="info" # debug|info|error
exec 3>info.log
exec 4>debug.log
exec 5>error.log
▪️ Лог-функции с проверкой уровня
log_info() { [[ $LOGLEVEL =~ info|debug ]] && echo "[INFO] $*" >&3; }
log_debug() { [[ $LOGLEVEL == debug ]] && echo "[DEBUG] $*" >&4; }
log_error() { echo "[ERROR] $*" >&5; }
▪️ Быстрое переключение уровня. Прямо в процессе выполнения можно менять уровень логов:
set_loglevel() {
LOGLEVEL="$1"
log_info "Loglevel switched to: $LOGLEVEL"
}
# Пример:
set_loglevel debug
▪️ Перенаправление в консоль при необходимости. Например, показывать ERROR сразу на экране:
exec 5> >(tee -a error.log >&2)
Или дебаг-режим в реальном времени:
exec 4> >(sed 's/^/[DBG]/' >&2)
BashTex 📱 #bash #utils