0Pricing
Go Academy · Lección

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
  • NewTextHandler para las personas, NewJSONHandler para las máquinas
  • Los handlers aceptan cualquier io.Writer y *HandlerOptions
  • slog.SetDefault conecta 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.

Todas las lecciones de este curso

  1. Por qué usar logs estructurados
  2. Handlers de slog
  3. Niveles y atributos de logs
  4. Handlers personalizados
← Volver a Go Academy