TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #441 1.35K
Многоуровневый логинг

Большинство скриптов просто пишут все в 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
  • 👍 6
More from @bash_tex
  1. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  2. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  3. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  4. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  5. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  6. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →