Zap / Logrus para Go: guía completa con ejemplos

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 al logging en Go: Zap y Logrus

\n\n

El logging es un componente crítico de cualquier aplicación seria. Permite rastrear el estado del programa, registrar errores, analizar el rendimiento y depurar código en entornos de producción. En la biblioteca estándar de Go existe el paquete log, pero tiene capacidades limitadas: no tiene niveles de logging (excepto los primitivos), no tiene salida estructurada, ni formatos flexibles. Para resolver estos problemas se crearon dos potentes bibliotecas: Zap (de Uber) y Logrus (uno de los primeros loggers populares).

\n\n

En este artículo analizaremos en detalle ambas bibliotecas, sus métodos, ejemplos de uso y mejores prácticas. Aprenderá cómo configurar el logging estructurado, cómo trabajar con niveles, cómo agregar campos contextuales y cómo evitar errores típicos.

\n\n

¿Qué es Zap?

\n

Zap es una biblioteca de alto rendimiento para logging estructurado de la empresa Uber. Está orientada a la velocidad y la mínima asignación de memoria. Zap admite dos modos de trabajo: SugaredLogger (cómodo, pero un poco más lento) y Logger (máximo rendimiento).

\n\n

¿Qué es Logrus?

\n

Logrus es una de las primeras y más populares bibliotecas de logging en Go. Proporciona una API simple, soporte para niveles, formateadores (JSON, Text) y hooks para integración con sistemas externos (por ejemplo, Sentry, Slack). Logrus es más fácil de aprender, pero es inferior a Zap en rendimiento.

\n\n

Instalación

\n

La instalación de ambas bibliotecas se realiza de forma estándar mediante go get:

\n\n
// Instalación de Zap\ngo get -u go.uber.org/zap\n\n// Instalación de Logrus\ngo get -u github.com/sirupsen/logrus\n
\n\n

Después de la instalación, puede importarlas en su proyecto:

\n\n
import (\n    "go.uber.org/zap"\n    "github.com/sirupsen/logrus"\n)\n
\n\n

Inicio rápido con ejemplo de código

\n\n

Ejemplo con Zap

\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    // Creamos un logger de producción (alto rendimiento)\n    logger, _ := zap.NewProduction()\n    defer logger.Sync() // vaciamos el búfer antes de salir\n\n    // Registramos un mensaje con campos\n    logger.Info("Aplicación iniciada",\n        zap.String("version", "1.0.0"),\n        zap.Int("port", 8080),\n    )\n\n    // Usamos SugaredLogger por comodidad\n    sugar := logger.Sugar()\n    sugar.Infow("Usuario inició sesión",\n        "user", "john_doe",\n        "ip", "192.168.1.1",\n    )\n}\n
\n\n

Ejemplo con Logrus

\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    // Configuramos el formato de salida (JSON)\n    logrus.SetFormatter(&logrus.JSONFormatter{})\n\n    // Establecemos el nivel de logging\n    logrus.SetLevel(logrus.InfoLevel)\n\n    // Registramos un mensaje con campos\n    logrus.WithFields(logrus.Fields{\n        "version": "1.0.0",\n        "port":    8080,\n    }).Info("Aplicación iniciada")\n\n    // Registramos un error\n    logrus.WithFields(logrus.Fields{\n        "user": "john_doe",\n        "ip":   "192.168.1.1",\n    }).Warn("Intento de inicio de sesión con contraseña incorrecta")\n}\n
\n\n

Métodos y funciones principales

\n\n

1. Zap: NewProduction() / NewDevelopment()

\n

Qué hace: Crea un logger preconfigurado para entornos de producción o desarrollo. El logger de producción usa formato JSON y está optimizado para velocidad. El logger de desarrollo usa salida de texto con colores e incluye stack traces.

\n

Parámetros: Ninguno (devuelve *zap.Logger y un error).

\n

Ejemplo:

\n
prodLogger, _ := zap.NewProduction()\ndevLogger, _ := zap.NewDevelopment()\n
\n\n

2. Zap: Logger.Info(),

Recommendations