Niveles y atributos de logs
Añada contexto a los logs
Niveles y atributos de logs es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Añadir contexto a los logs
Un mensaje aislado indica qué ha ocurrido; los atributos proporcionan los detalles que hacen que los logs sean útiles: qué usuario, qué solicitud y cuánto tiempo ha tardado.
Los cuatro niveles
Niveles de slog, de menor a mayor gravedad:
Debug(-4)Info(0)Warn(4)Error(8)
Los niveles son enteros, por lo que puede definir niveles personalizados intermedios.
Filtrar por nivel
Establezca un nivel mínimo en HandlerOptions. Los registros que estén por debajo se descartan de forma eficiente.
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelWarn}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
logger.Info("ignored")
logger.Warn("shown")
}Atributos tipados
Además de los argumentos clave-valor sin tipo, slog ofrece constructores tipados que evitan errores y son más rápidos:
slog.String("k", v)slog.Int("k", v)slog.Bool("k", v)slog.Duration("k", d)
slog.Info("done", slog.String("phase", "build"), slog.Int("files", 12))Por qué usar atributos tipados
Los atributos tipados detectan en tiempo de compilación el error de «número impar de argumentos» y permiten que el handler omita la reflexión. Prefiéralos en las rutas críticas.
Agrupar atributos
slog.Group anida campos relacionados bajo una misma clave.
slog.Info("req",
slog.Group("http",
slog.String("method", "GET"),
slog.Int("status", 200),
),
)Logger.With para compartir contexto
logger.With(...) devuelve un logger hijo que añade los mismos atributos a cada mensaje. Es perfecto para un ID de solicitud.
reqLog := logger.With("requestID", "abc-123")
reqLog.Info("started")
reqLog.Info("finished")Logging consciente del contexto
Las variantes *Context (por ejemplo, InfoContext) transportan un context.Context, lo que permite a los handlers extraer los ID de trazas.
slog.InfoContext(ctx, "handling", "path", "/api")Niveles dinámicos
Use un slog.LevelVar para cambiar el nivel en tiempo de ejecución (por ejemplo, subirlo a Debug al investigar un incidente) sin reiniciar la aplicación.
var lvl slog.LevelVar
lvl.Set(slog.LevelInfo)
h := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: &lvl})
// later: lvl.Set(slog.LevelDebug)Errores como atributos
Añada los errores como atributos para que puedan consultarse, en lugar de concatenarlos en el mensaje.
slog.Error("save failed", slog.String("err", err.Error()), slog.Int("retry", 2))Ejecutable: niveles y With
Este programa filtra por nivel y usa un logger hijo con contexto compartido.
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelInfo}
base := slog.New(slog.NewTextHandler(os.Stdout, opts))
req := base.With("requestID", "r-7")
req.Debug("hidden")
req.Info("processing", slog.Int("items", 3))
}Comprobación rápida
Compruebe lo que ha aprendido sobre niveles y atributos.
Resumen
Ha aprendido sobre niveles y atributos:
- Hay cuatro niveles integrados; filtre con
HandlerOptions.Level - Los atributos tipados (
slog.String,slog.Int) son más seguros y rápidos slog.Groupanida campos;logger.Withcomparte contextoLevelVarpermite cambiar los niveles en tiempo de ejecución
Preguntas frecuentes
¿La lección «Niveles y atributos de logs» es gratis?
Sí — el texto completo de «Niveles y atributos de logs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Niveles y atributos de logs»?
Añada contexto a los logs Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Niveles y atributos de logs»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué usar logs estructurados
- Handlers de slog
- Niveles y atributos de logs
- Handlers personalizados