diff options
| author | Felix Hanley <felix@userspace.com.au> | 2017-12-08 02:46:01 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2017-12-08 02:46:01 +0000 |
| commit | 19d4e7de75330abb4e71d3eecda7ca222d89da08 (patch) | |
| tree | 114272a3913cc795cb86321a0e29fc9b7c46df63 | |
| parent | a6d5e43da92cc7a6f404e501e2bd7bdd8d6be029 (diff) | |
| download | logger-19d4e7de75330abb4e71d3eecda7ca222d89da08.tar.gz logger-19d4e7de75330abb4e71d3eecda7ca222d89da08.tar.bz2 | |
Make keyvalue the default writer0.1.0
| -rw-r--r-- | default.go | 29 | ||||
| -rw-r--r-- | keyvalue.go (renamed from outputs/keyvalue/keyvalue.go) | 17 | ||||
| -rw-r--r-- | logger_test.go | 70 | ||||
| -rw-r--r-- | outputs/keyvalue/keyvalue_test.go | 97 |
4 files changed, 50 insertions, 163 deletions
diff --git a/default.go b/default.go deleted file mode 100644 index 1246153..0000000 --- a/default.go +++ /dev/null @@ -1,29 +0,0 @@ -package logger - -import ( - "fmt" - "io" - "strings" -) - -// DefaultWriter implementation -type DefaultWriter struct{} - -// NewDefaultWriter creates a new writer -func NewDefaultWriter() *DefaultWriter { - return &DefaultWriter{} -} - -// Write implements the logger.MessageWriter interface -func (dw DefaultWriter) Write(w io.Writer, m Message) { - prefix := fmt.Sprintf("%s [%-5s]", m.Time, strings.ToUpper(m.Level.String())) - io.WriteString(w, prefix) - - if m.Name != "" { - io.WriteString(w, fmt.Sprintf(" %s:", m.Name)) - } - - for _, f := range m.Fields { - io.WriteString(w, fmt.Sprintf(" %s", ToString(f))) - } -} diff --git a/outputs/keyvalue/keyvalue.go b/keyvalue.go index 234f29b..244cb11 100644 --- a/outputs/keyvalue/keyvalue.go +++ b/keyvalue.go @@ -1,22 +1,21 @@ -package keyvalue +package logger import ( "fmt" - "github.com/felix/logger" "io" "strings" ) -// Writer implementation -type Writer struct{} +// DefaultWriter implementation +type DefaultWriter struct{} // New creates a new writer -func New() *Writer { - return &Writer{} +func NewDefaultWriter() *DefaultWriter { + return &DefaultWriter{} } // Write implements the logger.MessageWriter interface -func (kv Writer) Write(w io.Writer, m logger.Message) { +func (kv DefaultWriter) Write(w io.Writer, m Message) { prefix := fmt.Sprintf("%s [%-5s]", m.Time, strings.ToUpper(m.Level.String())) io.WriteString(w, prefix) if m.Name != "" { @@ -38,8 +37,8 @@ func (kv Writer) Write(w io.Writer, m logger.Message) { func writeKV(k, v interface{}) string { return fmt.Sprintf( " %s=%s", - maybeQuote(logger.ToString(k)), - maybeQuote(logger.ToString(v)), + maybeQuote(ToString(k)), + maybeQuote(ToString(v)), ) } diff --git a/logger_test.go b/logger_test.go index d349801..fe990a5 100644 --- a/logger_test.go +++ b/logger_test.go @@ -6,35 +6,33 @@ import ( "testing" ) -func TestDefaultWriter(t *testing.T) { +func TestKeyValueWriter(t *testing.T) { var tests = []struct { in []interface{} out string }{ { in: []interface{}{"one"}, - out: "[INFO ] testlog: one\n", + out: "[INFO ] test: message=one\n", }, { in: []interface{}{"one", "two", "2"}, - out: "[INFO ] testlog: one two 2\n", + out: "[INFO ] test: message=one two=2\n", }, { in: []interface{}{"one", "two", "2", "three", 3}, - out: "[INFO ] testlog: one two 2 three 3\n", + out: "[INFO ] test: message=one two=2 three=3\n", }, - /* TODO maps are not ordered { - in: []interface{}{"one", map[string]string{"two": "2", "three": "3"}}, - out: "[INFO ] testlog: one two 2 three 3", + in: []interface{}{"one", "two", "2", "three", 3, "fo ur", "# 4"}, + out: "[INFO ] test: message=one two=2 three=3 \"fo ur\"=\"# 4\"\n", }, - */ } for _, tt := range tests { var buf bytes.Buffer logger := New(&Options{ - Name: "testlog", + Name: "test", Output: &buf, }) @@ -52,29 +50,45 @@ func TestDefaultWriter(t *testing.T) { } } -// Comparison with hclog -func BenchmarkLogger(b *testing.B) { - b.Run("info with 10 pairs", func(b *testing.B) { +func TestKeyValueWriterWithFields(t *testing.T) { + var tests = []struct { + in []interface{} + out string + }{ + { + in: []interface{}{"one"}, + out: "[INFO ] test: message=one added=this\n", + }, + { + in: []interface{}{"one", "two", "2"}, + out: "[INFO ] test: message=one two=2 added=this\n", + }, + { + in: []interface{}{"one", "two", "2", "three", 3}, + out: "[INFO ] test: message=one two=2 three=3 added=this\n", + }, + { + in: []interface{}{"one", "two", "2", "three", 3, "fo ur", "# 4"}, + out: "[INFO ] test: message=one two=2 three=3 \"fo ur\"=\"# 4\" added=this\n", + }, + } + for _, tt := range tests { var buf bytes.Buffer - logger := New(&Options{ Name: "test", Output: &buf, - }) + }).WithFields("added", "this") + + logger.Info(tt.in...) + + str := buf.String() - for i := 0; i < b.N; i++ { - logger.Info("this is some message", - "name", "foo", - "what", "benchmarking yourself", - "why", "to see what's slow", - "k4", "value", - "k5", "value", - "k6", "value", - "k7", "value", - "k8", "value", - "k9", "value", - "k10", "value", - ) + // Chop timestamp + dataIdx := strings.IndexByte(str, ' ') + rest := str[dataIdx+1:] + + if rest != tt.out { + t.Errorf("Info(%q) => %q, expected %q\n", tt.in, rest, tt.out) } - }) + } } diff --git a/outputs/keyvalue/keyvalue_test.go b/outputs/keyvalue/keyvalue_test.go deleted file mode 100644 index bf02879..0000000 --- a/outputs/keyvalue/keyvalue_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package keyvalue - -import ( - "bytes" - "github.com/felix/logger" - "strings" - "testing" -) - -func TestKeyValueWriter(t *testing.T) { - var tests = []struct { - in []interface{} - out string - }{ - { - in: []interface{}{"one"}, - out: "[INFO ] test: message=one\n", - }, - { - in: []interface{}{"one", "two", "2"}, - out: "[INFO ] test: message=one two=2\n", - }, - { - in: []interface{}{"one", "two", "2", "three", 3}, - out: "[INFO ] test: message=one two=2 three=3\n", - }, - { - in: []interface{}{"one", "two", "2", "three", 3, "fo ur", "# 4"}, - out: "[INFO ] test: message=one two=2 three=3 \"fo ur\"=\"# 4\"\n", - }, - } - - for _, tt := range tests { - var buf bytes.Buffer - logger := logger.New(&logger.Options{ - Name: "test", - Output: &buf, - Formatter: New(), - }) - - logger.Info(tt.in...) - - str := buf.String() - - // Chop timestamp - dataIdx := strings.IndexByte(str, ' ') - rest := str[dataIdx+1:] - - if rest != tt.out { - t.Errorf("Info(%q) => %q, expected %q\n", tt.in, rest, tt.out) - } - } -} - -func TestKeyValueWriterWithFields(t *testing.T) { - var tests = []struct { - in []interface{} - out string - }{ - { - in: []interface{}{"one"}, - out: "[INFO ] test: message=one added=this\n", - }, - { - in: []interface{}{"one", "two", "2"}, - out: "[INFO ] test: message=one two=2 added=this\n", - }, - { - in: []interface{}{"one", "two", "2", "three", 3}, - out: "[INFO ] test: message=one two=2 three=3 added=this\n", - }, - { - in: []interface{}{"one", "two", "2", "three", 3, "fo ur", "# 4"}, - out: "[INFO ] test: message=one two=2 three=3 \"fo ur\"=\"# 4\" added=this\n", - }, - } - for _, tt := range tests { - var buf bytes.Buffer - logger := logger.New(&logger.Options{ - Name: "test", - Output: &buf, - Formatter: New(), - }).WithFields("added", "this") - - logger.Info(tt.in...) - - str := buf.String() - - // Chop timestamp - dataIdx := strings.IndexByte(str, ' ') - rest := str[dataIdx+1:] - - if rest != tt.out { - t.Errorf("Info(%q) => %q, expected %q\n", tt.in, rest, tt.out) - } - } -} |
