Registro en aplicaciones Go: mejores prácticas en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué el registro en Go no es solo fmt.Println



El registro son los ojos y oídos de cualquier aplicación que funcione en producción. En el mundo de Go (Golang), el enfoque del registro ha experimentado una evolución significativa: desde la simple salida a la consola a través de fmt.Println hasta potentes registradores estructurados capaces de generar registros compatibles con JSON para sistemas centralizados de recopilación de registros (ELK, Grafana Loki, Datadog).



En este artículo, analizaremos las mejores prácticas de registro en Go en la práctica, no en teoría. Aprenderá cómo configurar niveles de registro, usar registros estructurados, evitar el "ruido" y manejar errores correctamente. Todos los ejemplos de código están listos para usar en sus proyectos.



1. La biblioteca estándar log: cuándo es suficiente y cuándo no



Go proporciona el paquete integrado log de la biblioteca estándar. Es simple, pero tiene limitaciones significativas.



Ejemplo básico

package main

import ( "log" "os")

func main() { // Configuración de salida a archivo file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) defer file.Close() log.SetOutput(file)

log.Println("Aplicación iniciada") log.Printf("Usuario %s autorizado", "admin") log.Fatal("Error crítico: no se pudo conectar a la BD")}


Ventajas:

  • No requiere instalar dependencias de terceros.
  • Simplicidad de uso para scripts pequeños o utilidades CLI.


Desventajas:

  • No tiene niveles de registro (solo Print, Fatal, Panic).
  • Formato de salida fijo (fecha, hora, mensaje).
  • No tiene campos estructurados (clave-valor).
  • Difícil de analizar por sistemas de recopilación de registros.


Conclusión: para servicios en producción, arquitectura de microservicios o cualquier aplicación que requiera monitoreo, el log estándar no es adecuado. Cambie al registro estructurado.



2. Registro estructurado con zerolog: el estándar moderno



La biblioteca zerolog es uno de los registradores más populares y rápidos en Go. Admite niveles de registro, salida JSON por defecto y asignación mínima de memoria.



Instalación

go get -u github.com/rs/zerolog/log


Ejemplo de configuración y uso

package main

import ( "os" "time"

"github.com/rs/zerolog" "github.com/rs/zerolog/log")

func main() { // Configuración del formato de hora zerolog.TimeFieldFormat = time.RFC3339

// Salida a consola con colores (para desarrollo) log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339})

// Para producción — JSON a stdout // log.Logger = zerolog.New(os.Stdout).With().Timestamp().Logger()

log.Info().Msg("Servidor iniciado en el puerto 8080") log.Debug().Str("module", "auth").Msg("Intento de inicio de sesión de usuario") log.Error().Err(err).Str("user_id", "12345").Msg("Error de autorización") log.Fatal().Int("attempt", 3).Msg("Se superó el número de intentos")}


Niveles de registro en zerolog

  • Trace (log.Trace()) — para depuración profunda.
  • Debug (log.Debug()) — información de depuración.
  • Info (log.Info()) — eventos normales.
  • Warn (log.Warn()) — advertencias (no errores).
  • Error (log.Error()) — errores que requieren atención.
  • Fatal (log.Fatal()) — errores fatales (finaliza el programa).
  • Panic (log.Panic()) — pánico con salida de la pila.


Mejor práctica: en producción, establezca el mínimo

Blogs

Book Recommendations