Registro en Bash
Patrones de registro estructurados para scripts de bash con soporte de color, iconos emoji e integración con CI/CD.
Funciones Básicas de Registro
Implementación de registro simple y portátil:
# Definiciones de color
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]='🐛'
)
# Funciones de registro
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]}"
}
Niveles de Registro
Implementa niveles de registro configurables.
Detección de TTY
Desactiva colores en entornos no interactivos:
setup_colors() {
if [[ -t 1 ]] && [[ -z "${NO_COLOR:-}" ]]; then
# El terminal soporta colores
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
# Sin soporte de color
COLOR_RED=''
COLOR_GREEN=''
COLOR_YELLOW=''
COLOR_BLUE=''
COLOR_RESET=''
fi
}
# Los entornos CI a menudo soportan colores
detect_color_support() {
if [[ -n "${CI:-}" ]] || [[ -n "${GITLAB_CI:-}" ]] || [[ -n "${GITHUB_ACTIONS:-}" ]]; then
return 0 # Entorno CI, habilitar colores
elif [[ -t 1 ]]; then
return 0 # Terminal, habilitar colores
else
return 1 # Sin soporte de color
fi
}
Secciones Plegables de GitLab CI
Crea secciones de registro plegables en 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
}
# Uso
section_start "build" "Construyendo Aplicación"
make build
section_end "build"
Agrupación de GitHub Actions
Indicadores de Progreso
Registro Estructurado por Pasos
Biblioteca de Registro Shlocksmith
Para un registro completo con integración total de CI, utiliza la biblioteca de registro shlocksmith.
Características
- Más de 20 funciones de nivel de registro (log_info, log_error, log_warning, etc.)
- Registro basado en pasos (log_step_start, log_step_pass, log_step_fail)
- Soporte de color y emoji con detección de TTY
- Gestión de secciones de GitLab CI
- Caracteres de dibujo de cajas para TUI
- Formato de pares clave-valor
Funciones Disponibles
# Registro básico
log_info "Mensaje informativo"
log_warning "Mensaje de advertencia"
log_error "Mensaje de error"
log_debug "Mensaje de depuración" # Solo se muestra cuando DEBUG está definido
log_notice "Mensaje de aviso"
log_fatal "Error fatal" # Sale del script
# Registro basado en pasos
log_start "Nombre del proceso"
log_step_start "Descripción del paso"
log_step_pass "Mensaje de éxito"
log_step_fail "Mensaje de fallo"
log_step_skip "Mensaje omitido"
log_step_done "Mensaje de finalización"
log_done "Proceso completado"
# Resultados
log_pass "Prueba superada"
log_fail "Prueba fallida"
log_result "Detalles del resultado"
log_success "Mensaje de éxito"
# Secciones de CI
section_start "section_id" "Título de la sección"
section_end "section_id"
Uso
#!/usr/bin/env bash
source /ruta/a/log_functions.sh
log_start "Proceso de Despliegue"
section_start "deps" "Instalando Dependencias"
log_step_start "Instalando paquetes"
if apt-get install -y paquete; then
log_step_pass "Paquetes instalados"
else
log_step_fail "Falló la instalación de paquetes"
fi
section_end "deps"
log_done "Despliegue completado"
Recursos Adicionales
Scripts
- log_functions.sh - Biblioteca de registro completa shlocksmith
Referencia de Colores
| Código | Color |
|---|---|
\033[0;30m | Negro |
\033[0;31m | Rojo |
\033[0;32m | Verde |
\033[0;33m | Amarillo |
\033[0;34m | Azul |
\033[0;35m | Magenta |
\033[0;36m | Cian |
\033[0;37m | Blanco |
\033[1;XXm | Variante negrita |
\033[0m | Reiniciar |