Logging para Go (Golang): mejores soluciones y herramientas
El logging es uno de los componentes clave de cualquier aplicación de producción en Go. Ayuda a rastrear errores, analizar el comportamiento del sistema y realizar auditorías. En Go existen muchas bibliotecas para logging, cada una con sus propias características, rendimiento y facilidad de uso. En este artículo revisaremos las mejores soluciones: desde el paquete estándar log hasta los de alto rendimiento zap y zerolog, así como el nuevo estándar slog.
1. Paquete estándar log
El paquete integrado log es la forma más sencilla de empezar a registrar en Go. No requiere instalar dependencias de terceros y es adecuado para proyectos pequeños o prototipado rápido.
Características:
- API minimalista:
Print,Printf,Println,Fatal,Panic. - Soporte para prefijos y banderas (fecha, hora, archivo).
- Por defecto, imprime en
os.Stderr. - No admite logging estructurado "de fábrica".
package main
import "log"
func main() { log.Println("Este es un mensaje simple") log.Printf("El usuario %s inició sesión", "admin") log.Fatal("Error crítico — la aplicación terminará")}Cuándo usarlo: para scripts, utilidades, pruebas o cuando no se necesitan formatos complejos.
2. logrus — logging estructurado
Logrus es una de las bibliotecas más populares para Go. Proporciona logging estructurado con soporte para niveles, campos y formato (JSON, texto).
Características:
- Niveles: Trace, Debug, Info, Warn, Error, Fatal, Panic.
- Soporte para hooks (ganchos) para enviar logs a servicios externos.
- Formateo flexible: TextFormatter, JSONFormatter.
- Posibilidad de agregar campos contextuales.
package main
import ( "github.com/sirupsen/logrus")
func main() { log := logrus.New() log.SetFormatter(&logrus.JSONFormatter{}) log.WithFields(logrus.Fields{ "user": "admin", "ip": "192.168.1.1", }).Info("Usuario autorizado")}Desventaja: rendimiento inferior al de bibliotecas más nuevas (zap, zerolog).
3. zap — logging ultrarrápido de Uber
Zap de Uber es una biblioteca centrada en el máximo rendimiento. Utiliza reflexión (reflection) solo cuando es necesario y ofrece dos modos: SugaredLogger (conveniente, más lento) y Logger (rápido, requiere tipado estricto).
Características:
- Velocidad muy alta: hasta 10 veces más rápido que logrus.
- Soporte para logging estructurado con campos.
- Configuración flexible: niveles, salida a archivo/consola, rotación.
- Seguridad: no asigna memoria en la ruta crítica.
package main
import ( "go.uber.org/zap")
func main() { logger, _ := zap.NewProduction() defer logger.Sync()
logger.Info("Servidor iniciado", zap.String("port", "8080"), zap.Int("workers", 10), )}Cuándo usarlo: microservicios de alta carga, sistemas en tiempo real.
4. zerolog — minimalismo y rendimiento
Zerolog es otra biblioteca de alto rendimiento que se enfoca en cero asignaciones y simplicidad. Viene con excelente documentación y soporte integrado para JSON por defecto.
Características:
- Asignaciones mínimas de memoria.
- Soporte para niveles, campos, sub-loggers.
- Pretty-printing integrado para desarrollo.
- Po
También en la biblioteca
Configuración de aplicaciones Swift: biblioteca SwiftyConfig
Parseo de HTML en Rust: bibliotecas y ejemplos prácticos
Aprendizaje automático en PHP: revisión de bibliotecas y herramientas
Criptografía en Swift (iOS/macOS): cifrado y hash