Was macht bash-logging?
Strukturierte Logging-Muster für Bash-Skripte mit Farbunterstützung, Emoji-Symbolen und CI/CD-Integration.
Grundlegende Logging-Funktionen
Einfache, portable Logging-Implementierung:
# Farbdefinitionen
declare -A colors=(
[green]=$'\033[0;32m'
[red]=$'\033[0;31m'
[yellow]=$'\033[1;33m'
[blue]=$'\033[0;34m'
[reset]=$'\033[0m'
)
declare -A emojis=(
[success]='✅'
[error]='❌'
[warning]='⚠️'
[info]='ℹ️'
[debug]='🐛'
)
# Logging-Funktionen
print_success() {
printf '%b %b%b%b\n' "${emojis[success]}" "${colors[green]}" "$*" "${colors[reset]}"
}
print_error() {
printf '%b %b%b%b\n' "${emojis[error]}" "${colors[red]}" "$*" "${colors[reset]}" >&2
}
print_warning() {
printf '%b %b%b%b\n' "${emojis[warning]}" "${colors[yellow]}" "$*" "${colors[reset]}"
}
print_info() {
printf '%b %b\n' "${emojis[info]}" "$*"
}
print_debug() {
[[ -n "${DEBUG:-}" ]] && printf '%b %b%b%b\n' "${emojis[debug]}" "${colors[blue]}" "$*" "${colors[reset]}"
}
Log-Level
Konfigurierbare Log-Level implementieren.
TTY-Erkennung
Farben in nicht-interaktiven Umgebungen deaktivieren:
setup_colors() {
if [[ -t 1 ]] && [[ -z "${NO_COLOR:-}" ]]; then
# Terminal unterstützt Farben
COLOR_RED=$'\033[0;31m'
COLOR_GREEN=$'\033[0;32m'
COLOR_YELLOW=$'\033[1;33m'
COLOR_BLUE=$'\033[0;34m'
COLOR_RESET=$'\033[0m'
else
# Keine Farbunterstützung
COLOR_RED=''
COLOR_GREEN=''
COLOR_YELLOW=''
COLOR_BLUE=''
COLOR_RESET=''
fi
}
# CI-Umgebungen unterstützen oft Farben
detect_color_support() {
if [[ -n "${CI:-}" ]] || [[ -n "${GITLAB_CI:-}" ]] || [[ -n "${GITHUB_ACTIONS:-}" ]]; then
return 0 # CI-Umgebung, Farben aktivieren
elif [[ -t 1 ]]; then
return 0 # Terminal, Farben aktivieren
else
return 1 # Keine Farbunterstützung
fi
}
GitLab CI – Zusammenklappbare Abschnitte
Zusammenklappbare Log-Abschnitte in GitLab CI erstellen:
section_start() {
local section_key="\${1:-section}"
local section_header="\${2:-$section_key}"
local collapsed="\${3:-true}"
if [[ -n "${GITLAB_CI:-}" ]]; then
printf "\e[0Ksection_start:%s:%s[collapsed=%s]\r\e[0K%s\n" \
"$(date +%s)" "$section_key" "$collapsed" "$section_header"
else
printf '\n=== %s ===\n' "$section_header"
fi
}
section_end() {
local section_key="\${1:-section}"
if [[ -n "${GITLAB_CI:-}" ]]; then
printf "\e[0Ksection_end:%s:%s\r\e[0K" "$(date +%s)" "$section_key"
else
printf '\n'
fi
}
# Verwendung
section_start "build" "Anwendung bauen"
make build
section_end "build"
GitHub Actions – Gruppierung
Fortschrittsanzeigen
Strukturiertes Schritt-Logging
Shlocksmith-Logging-Bibliothek
Für umfassendes Logging mit vollständiger CI-Integration die Shlocksmith-Logging-Bibliothek verwenden.
Funktionen
- Über 20 Log-Level-Funktionen (log_info, log_error, log_warning, usw.)
- Schrittbasiertes Logging (log_step_start, log_step_pass, log_step_fail)
- Farb- und Emoji-Unterstützung mit TTY-Erkennung
- GitLab-CI-Abschnittsverwaltung
- Zeichen zum Zeichnen von Rahmen für TUI
- Schlüssel-Wert-Paare formatieren
Verfügbare Funktionen
# Basis-Logging
log_info "Informationsmeldung"
log_warning "Warnmeldung"
log_error "Fehlermeldung"
log_debug "Debug-Meldung" # Nur angezeigt, wenn DEBUG gesetzt ist
log_notice "Hinweismeldung"
log_fatal "Schwerwiegender Fehler" # Beendet das Skript
# Schrittbasiertes Logging
log_start "Prozessname"
log_step_start "Schrittbeschreibung"
log_step_pass "Erfolgsmeldung"
log_step_fail "Fehlermeldung"
log_step_skip "Übersprungene Meldung"
log_step_done "Abschlussmeldung"
log_done "Prozess abgeschlossen"
# Ergebnisse
log_pass "Test bestanden"
log_fail "Test fehlgeschlagen"
log_result "Ergebnisdetails"
log_success "Erfolgsmeldung"
# CI-Abschnitte
section_start "section_id" "Abschnittstitel"
section_end "section_id"
Verwendung
#!/usr/bin/env bash
source /path/to/log_functions.sh
log_start "Bereitstellungsprozess"
section_start "deps" "Abhängigkeiten installieren"
log_step_start "Pakete installieren"
if apt-get install -y package; then
log_step_pass "Pakete installiert"
else
log_step_fail "Paketinstallation fehlgeschlagen"
fi
section_end "deps"
log_done "Bereitstellung abgeschlossen"
Zusätzliche Ressourcen
Skripte
- log_functions.sh – Vollständige Shlocksmith-Logging-Bibliothek
Farbreferenz
| Code | Farbe |
|---|---|
\033[0;30m | Schwarz |
\033[0;31m | Rot |
\033[0;32m | Grün |
\033[0;33m | Gelb |
\033[0;34m | Blau |
\033[0;35m | Magenta |
\033[0;36m | Cyan |
\033[0;37m | Weiß |
\033[1;XXm | Fette Variante |
\033[0m | Zurücksetzen |