Journalisation Bash (Bash Logging)
Modèles de journalisation structurée pour scripts bash avec prise en charge des couleurs, des émoticônes et de l'intégration CI/CD.
Fonctions de journalisation de base
Implémentation simple et portable de la journalisation :
# Définitions des couleurs
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]='🐛'
)
# Fonctions de journalisation
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]}"
}
Niveaux de log
Implémentez des niveaux de log configurables.
Détection TTY
Désactivez les couleurs dans les environnements non interactifs :
setup_colors() {
if [[ -t 1 ]] && [[ -z "${NO_COLOR:-}" ]]; then
# Le terminal prend en charge les couleurs
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
# Pas de prise en charge des couleurs
COLOR_RED=''
COLOR_GREEN=''
COLOR_YELLOW=''
COLOR_BLUE=''
COLOR_RESET=''
fi
}
# Les environnements CI prennent souvent en charge les couleurs
detect_color_support() {
if [[ -n "${CI:-}" ]] || [[ -n "${GITLAB_CI:-}" ]] || [[ -n "${GITHUB_ACTIONS:-}" ]]; then
return 0 # Environnement CI, activer les couleurs
elif [[ -t 1 ]]; then
return 0 # Terminal, activer les couleurs
else
return 1 # Pas de prise en charge des couleurs
fi
}
Sections pliables GitLab CI
Créez des sections de log pliables dans GitLab CI :
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
}
# Utilisation
section_start "build" "Construction de l'application"
make build
section_end "build"
Regroupement GitHub Actions
Indicateurs de progression
Journalisation structurée par étapes
Bibliothèque de journalisation Shlocksmith
Pour une journalisation complète avec intégration CI complète, utilisez la bibliothèque de journalisation shlocksmith.
Fonctionnalités
- Plus de 20 fonctions de niveau de log (log_info, log_error, log_warning, etc.)
- Journalisation par étapes (log_step_start, log_step_pass, log_step_fail)
- Prise en charge des couleurs et des émoticônes avec détection TTY
- Gestion des sections GitLab CI
- Caractères de dessin de boîtes pour TUI
- Formatage clé-valeur
Fonctions disponibles
# Journalisation de base
log_info "Message d'information"
log_warning "Message d'avertissement"
log_error "Message d'erreur"
log_debug "Message de débogage" # Affiché uniquement si DEBUG est défini
log_notice "Message de notification"
log_fatal "Erreur fatale" # Quitte le script
# Journalisation par étapes
log_start "Nom du processus"
log_step_start "Description de l'étape"
log_step_pass "Message de succès"
log_step_fail "Message d'échec"
log_step_skip "Message ignoré"
log_step_done "Message d'achèvement"
log_done "Processus terminé"
# Résultats
log_pass "Test réussi"
log_fail "Test échoué"
log_result "Détails du résultat"
log_success "Message de succès"
# Sections CI
section_start "section_id" "Titre de la section"
section_end "section_id"
Utilisation
#!/usr/bin/env bash
source /chemin/vers/log_functions.sh
log_start "Processus de déploiement"
section_start "deps" "Installation des dépendances"
log_step_start "Installation des paquets"
if apt-get install -y package; then
log_step_pass "Paquets installés"
else
log_step_fail "Échec de l'installation des paquets"
fi
section_end "deps"
log_done "Déploiement terminé"
Ressources supplémentaires
Scripts
- log_functions.sh - Bibliothèque de journalisation complète shlocksmith
Référence des couleurs
| Code | Couleur |
|---|---|
\033[0;30m | Noir |
\033[0;31m | Rouge |
\033[0;32m | Vert |
\033[0;33m | Jaune |
\033[0;34m | Bleu |
\033[0;35m | Magenta |
\033[0;36m | Cyan |
\033[0;37m | Blanc |
\033[1;XXm | Variante gras |
\033[0m | Réinitialiser |