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() }