fmt.Println — stdout output without metadata. log.Println — stderr output with timestamp.
fmt.Println:
os.Stdout.(n int, err error).1fmt.Println("Hello, World!")2// Output: Hello, World!34fmt.Printf("Name: %s\n", name)5fmt.Fprintf(w, "Response: %v\n", data)
log.Println:
os.Stderr.2024/01/15 10:30:45.os.Exit(1) on write error.1log.Println("Server started")2// Output: 2024/01/15 10:30:45 Server started34log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)5log.Println("Debug")6// Output: 2024/01/15 10:30:45 main.go:42 Debug78log.Printf("User %d logged in\n", id)
Structured logging:
1import "log/slog"23slog.Info("request handled", "method", "GET", "path", "/api")4slog.Error("database error", "error", err)
When to use fmt:
When to use log:
Common mistakes:
fmt.Println for logs (no timestamps).log.Println for user output (stderr).log.Fatal (exits immediately).