slog Setup

Configure structured logging with text or JSON output.

package main

import (
	"fmt"
	"log/slog"
	"os"
)

func setupLogger(level string, format string) {
	var logLevel slog.Level
	switch level {
	case "debug":
		logLevel = slog.LevelDebug
	case "warn":
		logLevel = slog.LevelWarn
	case "error":
		logLevel = slog.LevelError
	default:
		logLevel = slog.LevelInfo
	}

	opts := &slog.HandlerOptions{Level: logLevel, AddSource: true}

	var handler slog.Handler
	if format == "json" {
		handler = slog.NewJSONHandler(os.Stdout, opts)
	} else {
		handler = slog.NewTextHandler(os.Stdout, opts)
	}

	slog.SetDefault(slog.New(handler))
}

func main() {
	setupLogger("debug", "text")

	slog.Info("server starting", "port", 8080)
	slog.Debug("debug mode enabled")
	slog.Warn("disk space low", "available", "2GB")

	// slog.With adds persistent fields
	logger := slog.With("request_id", "abc-123")
	logger.Info("handling request", "method", "GET", "path", "/bookmarks")
	logger.Info("request complete", "status", 200)

	fmt.Println("\n--- JSON format ---")
	setupLogger("info", "json")
	slog.Info("server starting", "port", 8080)
}
▶ Open Go Playground

Copy the code above and paste to run

© 2026 ByteLearn.dev. Free courses for developers. · Privacy