log

Guided tour · Errors & Logging · pkg.go.dev →

Classic unstructured logger. Fine for small tools; prefer log/slog for structured logs in new code.

Default logger

Print / Printf / Println

log.Println("server started on :8080")
log.Printf("user %s logged in", name)

Fatal exits with status 1

log.Fatal("cannot open db:", err)     // log + os.Exit(1)
log.Fatalf("bad config: %v", err)

Panic logs and panics

log.Panic("invariant violated")

Custom logger

New

l := log.New(os.Stderr, "api: ", log.LstdFlags|log.Lshortfile)
l.Println("hello")   // api: 2024/01/02 15:04:05 main.go:42: hello

SetFlags / SetPrefix on default

log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.SetPrefix("worker: ")

SetOutput

f, _ := os.Create("app.log")
log.SetOutput(f)