From fc5339a368ea090fac3815b23421fb7d190fdc9e Mon Sep 17 00:00:00 2001
From: Sumanth Chinthagunta <xmlking@gmail.com>
Date: Sat, 15 Feb 2020 10:19:28 -0800
Subject: [PATCH] [W.I.P] refactor(logger): logger fields changed to
 map[string]interface{} (#1198)

* support unix daemon socket

* refactor(logger): logger fields changed to map[string]interface{}

* improvement(logger): adding string to Level Parser

* improvement(logger): rename ParseLevel to GetLevel
---
 logger/field.go  | 43 -------------------------------------------
 logger/level.go  | 20 ++++++++++++++++++++
 logger/logger.go | 26 +++++++++++++++++++++++++-
 3 files changed, 45 insertions(+), 44 deletions(-)
 delete mode 100644 logger/field.go

diff --git a/logger/field.go b/logger/field.go
deleted file mode 100644
index a91572ac..00000000
--- a/logger/field.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package logger
-
-type FieldType uint8
-
-type Encode func(*Field) string
-
-type Field struct {
-	Key    string
-	Type   FieldType
-	Value  interface{}
-	Encode Encode
-}
-
-func (f *Field) GetValue() interface{} {
-	if f.Encode != nil {
-		return f.Encode(f)
-	}
-
-	return f.Value
-}
-
-// preset common types for choosing encoder faster
-const (
-	UnknownType FieldType = iota
-	BoolType
-	DurationType
-	Float64Type
-	Float32Type
-	Int64Type
-	Int32Type
-	Int16Type
-	Int8Type
-	Uint64Type
-	Uint32Type
-	Uint16Type
-	Uint8Type
-	StringType
-	TimeType
-)
-
-func Bool(key string, val bool) Field {
-	return Field{Key: key, Type: BoolType, Value: val}
-}
diff --git a/logger/level.go b/logger/level.go
index d7a345be..b49ab52d 100644
--- a/logger/level.go
+++ b/logger/level.go
@@ -11,3 +11,23 @@ const (
 	PanicLevel
 	FatalLevel
 )
+
+func (l Level) String() string {
+	switch l {
+	case TraceLevel:
+		return "trace"
+	case DebugLevel:
+		return "debug"
+	case InfoLevel:
+		return "info"
+	case WarnLevel:
+		return "warn"
+	case ErrorLevel:
+		return "error"
+	case FatalLevel:
+		return "fatal"
+	case PanicLevel:
+		return "panic"
+	}
+	return ""
+}
diff --git a/logger/logger.go b/logger/logger.go
index 8d7a4ece..f4e451a4 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -20,7 +20,9 @@ type Logger interface {
 	// fmt.Printf.
 	Logf(level Level, format string, v ...interface{})
 	// Fields set fields to always be logged
-	Fields(fields ...Field) Logger
+	Fields(fields map[string]interface{}) Logger
+	// Error set `error` field to be logged
+	Error(err error) Logger
 	// SetLevel updates the logging level.
 	SetLevel(Level)
 	// String returns the name of logger
@@ -47,3 +49,25 @@ func GetLogger(name string) (Logger, error) {
 
 	return l, nil
 }
+
+// GetLevel converts a level string into a logger Level value.
+// returns an error if the input string does not match known values.
+func GetLevel(levelStr string) (Level, error) {
+	switch levelStr {
+	case TraceLevel.String():
+		return TraceLevel, nil
+	case DebugLevel.String():
+		return DebugLevel, nil
+	case InfoLevel.String():
+		return InfoLevel, nil
+	case WarnLevel.String():
+		return WarnLevel, nil
+	case ErrorLevel.String():
+		return ErrorLevel, nil
+	case FatalLevel.String():
+		return FatalLevel, nil
+	case PanicLevel.String():
+		return PanicLevel, nil
+	}
+	return InfoLevel, fmt.Errorf("Unknown Level String: '%s', defaulting to NoLevel", levelStr)
+}