slogf sets up a logger based on Go's slog package at 1.21 and enhances features with formatted print.
go get -u github.com/keithshum/slogf
slogf supports 2 log levels, debug and info. Setting debug to true for debug level while false is info level.
Debug level displays DEBUG, INFO, WARN, ERROR, FATAL logs.
Info level displays INFO, WARN, ERROR, FATAL logs.
slogf supports 2 log formats: text and json.
time=2023-07-11T17:12:46.649Z level=INFO source=main.go:29 msg="Entered main."
{"time":"2023-07-11T17:05:15.924382Z","level":"INFO","source":{"function":"main.main","file":"main.go","line":29},"msg":"Entered main."}
slogf supports 2 log styles.
Debug(), Info(), Warn(), Error(), Fatal() supports extra arguments and attributes.
Way to call: Debug(message, key1, value1, key2, value2) while message is string type value. For passing err directly, just append .Error() afterwards!
Debug("Hello world!", "Hello", "Peter Parker")
{"time":"2023-07-11T17:05:15.924556Z","level":"DEBUG","source":{"function":"main.main","file":"main.go","line":32},"msg":"Hello world!", "Hello":"Peter Parker"}
Debugf(), Infof(), Warnf(), Errorf(), Fatalf() supports print format style.
Way to call: Debugf(format, substitue)
Debugf("Hello, %v!", "Peter Parker")
{"time":"2023-07-11T17:05:15.924556Z","level":"DEBUG","source":{"function":"main.main","file":"main.go","line":32},"msg":"Hello, Peter Parker!"}
package main
import (
"errors"
log "github.com/keithshum/slogf"
)
func main() {
debug := true
format := "text" // Can be "text" or "json"
log.InitLogging(debug, format) // One-liner to initiate the logger.
log.Debug("Dummy debug message", "pod", "MY-POD-1")
log.Debugf("Dummy debug message. The pod is %v", "MY-POD-1")
log.Info("Entered main.", "Hello", "Peter Parker!")
log.Infof("Entered main. %v, %v", "Hello", "Peter Parker!")
log.Warn("Fake warning.", "pod", "MY-POD-2")
log.Warnf("Fake warning. The pod is %v", "MY-POD-2")
err := errors.New("dial tcp: lookup __some_service__: no such host")
log.Error(err.Error(), "pod", "MY-POD-3")
log.Errorf("Failed: %v", err.Error())
log.Fatal("Fatal and exit", "pod", "MY-POD-4")
log.Fatalf("Fatal and exit, pod = %v", "MY-POD-4") // This line will never get called as program has already exited.
}
[2023-08-29 UTC 23:02:07] /tmp/slogf $ go run main.go
time=2023-08-29T23:02:19.921Z level=DEBUG source=main.go:13 msg="Dummy debug message" pod=MY-POD-1
time=2023-08-29T23:02:19.921Z level=DEBUG source=main.go:14 msg="Dummy debug message. The pod is MY-POD-1"
time=2023-08-29T23:02:19.921Z level=INFO source=main.go:16 msg="Entered main." Hello="Peter Parker!"
time=2023-08-29T23:02:19.921Z level=INFO source=main.go:17 msg="Entered main. Hello, Peter Parker!"
time=2023-08-29T23:02:19.921Z level=WARN source=main.go:19 msg="Fake warning." pod=MY-POD-2
time=2023-08-29T23:02:19.921Z level=WARN source=main.go:20 msg="Fake warning. The pod is MY-POD-2"
time=2023-08-29T23:02:19.921Z level=ERROR source=main.go:23 msg="dial tcp: lookup __some_service__: no such host" pod=MY-POD-3
time=2023-08-29T23:02:19.921Z level=ERROR source=main.go:24 msg="Failed: dial tcp: lookup __some_service__: no such host"
time=2023-08-29T23:02:19.921Z level=FATAL source=main.go:26 msg="Fatal and exit" pod=MY-POD-4
exit status 1