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)
}