diff options
author | dakkar <dakkar@thenautilus.net> | 2024-12-19 09:42:17 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2024-12-19 09:42:17 +0000 |
commit | c940ac4f72e7e55ef1a7aa35cc0fc32684716977 (patch) | |
tree | df46d71d6b0ea49a979f90fc43b6947617942b04 /logging/logging.go | |
download | go-example-c940ac4f72e7e55ef1a7aa35cc0fc32684716977.tar.gz go-example-c940ac4f72e7e55ef1a7aa35cc0fc32684716977.tar.bz2 go-example-c940ac4f72e7e55ef1a7aa35cc0fc32684716977.zip |
minimal example
Diffstat (limited to 'logging/logging.go')
-rw-r--r-- | logging/logging.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/logging/logging.go b/logging/logging.go new file mode 100644 index 0000000..a24e13e --- /dev/null +++ b/logging/logging.go @@ -0,0 +1,43 @@ +package logging + +import ( + "encoding/json" + "fmt" + "io" + "os" + "time" + + "github.com/rs/zerolog" + + "www.thenautilus.net/cgit/go-example/config" +) + +// Logger returns a (optionally verbose) logger. +func Logger(conf config.LoggerConfig) zerolog.Logger { + logLevel := zerolog.InfoLevel + if conf.Verbose { + logLevel = zerolog.DebugLevel + } + + zerolog.TimestampFunc = func() time.Time { + return time.Now().UTC() + } + + zerolog.InterfaceMarshalFunc = func(value interface{}) ([]byte, error) { + switch v := value.(type) { + case fmt.Stringer: + str := fmt.Sprintf("\"%s\"", v.String()) + + return []byte(str), nil + default: + return json.Marshal(value) + } + } + + var w io.Writer = os.Stdout + if conf.Format == "console" { + w = zerolog.NewConsoleWriter() + } + + return zerolog.New(w).Level(logLevel).With().Timestamp().Logger() +} |