Handlers de slog
Handlers de texto y JSON
Handlers de slog es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 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.
Los handlers deciden el formato
En slog, un Logger llama a un Handler para dar formato y escribir cada registro. Cambiar el handler modifica el formato de salida sin tocar las llamadas de logging.
TextHandler
slog.NewTextHandler escribe líneas key=value fáciles de leer para las personas. Es adecuado para el desarrollo local y los terminales.
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewTextHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "dev")
}JSONHandler
slog.NewJSONHandler emite un objeto JSON por línea. Es ideal para las canalizaciones de logs de producción.
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewJSONHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "prod")
}Crear un Logger
slog.New(handler) envuelve un handler en un Logger. En esa instancia se llama a logger.Info, logger.Error, etc.
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))HandlerOptions
El segundo argumento del constructor de un handler es *slog.HandlerOptions. Pase nil para usar los valores predeterminados o configure el nivel y la ubicación del origen.
opts := &slog.HandlerOptions{
Level: slog.LevelDebug,
AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)Escribir en un archivo o búfer
Los handlers aceptan cualquier io.Writer. Puede registrar datos en un archivo, en un búfer para las pruebas o en stdout. Este desacoplamiento es un aspecto clave del diseño de slog.
f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))Establecer el Logger predeterminado
slog.SetDefault(logger) hace que las funciones del paquete (slog.Info, etc.) usen su handler. Establézcalo una vez al iniciar la aplicación.
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")Salida de texto frente a JSON
La misma llamada, dos formatos:
- Texto:
time=... level=INFO msg=hello env=dev - JSON:
{"time":"...","level":"INFO","msg":"hello","env":"dev"}
Elegir un handler
Como regla general:
- Local o desarrollo: TextHandler (fácil de leer)
- Producción o agregación: JSONHandler (fácil de analizar)
Decídalo mediante una variable de entorno para que el mismo binario pueda adaptarse.
Escribir una configuración reutilizable
Centralice la creación del logger para que toda la aplicación comparta una única configuración.
func newLogger(prod bool) *slog.Logger {
if prod {
return slog.New(slog.NewJSONHandler(os.Stdout, nil))
}
return slog.New(slog.NewTextHandler(os.Stdout, nil))
}Ejecutable: cambiar de handler
Este programa registra el mismo evento mediante ambos handlers para que pueda comparar los formatos.
package main
import (
"log/slog"
"os"
)
func main() {
text := slog.New(slog.NewTextHandler(os.Stdout, nil))
js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
text.Info("login", "user", "ada")
js.Info("login", "user", "ada")
}Comprobación rápida
Compruebe lo que ha aprendido sobre los handlers de slog.
Resumen
Ha aprendido sobre los handlers de slog:
- Los handlers dan formato a los registros y los escriben; el Logger los llama
NewTextHandlerpara las personas,NewJSONHandlerpara las máquinas- Los handlers aceptan cualquier
io.Writery*HandlerOptions slog.SetDefaultconecta las funciones del paquete
Preguntas frecuentes
¿La lección «Handlers de slog» es gratis?
Sí — el texto completo de «Handlers de slog» 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 «Handlers de slog»?
Handlers de texto y JSON 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 2 de 4.
¿Cuánto tiempo toma la lección «Handlers de slog»?
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.