aboutsummaryrefslogtreecommitdiff
path: root/logging/logging.go
diff options
context:
space:
mode:
Diffstat (limited to 'logging/logging.go')
-rw-r--r--logging/logging.go43
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()
+}