diff options
Diffstat (limited to 'logging')
-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() +} |