1
2
3
4 package syslog
5
6 import (
7 "fmt"
8 "reflect"
9 "testing"
10
11 gosyslog "log/syslog"
12
13 "github.com/go-kit/log"
14 "github.com/go-kit/log/level"
15 )
16
17 func TestSyslogLoggerDefaultPrioritySelector(t *testing.T) {
18 w := &testSyslogWriter{}
19 l := NewSyslogLogger(w, log.NewLogfmtLogger)
20
21 l.Log("level", level.WarnValue(), "msg", "one")
22 l.Log("level", "undefined", "msg", "two")
23 l.Log("level", level.InfoValue(), "msg", "three")
24 l.Log("level", level.ErrorValue(), "msg", "four")
25 l.Log("level", level.DebugValue(), "msg", "five")
26
27 l.Log("msg", "six", "level", level.ErrorValue())
28 l.Log("msg", "seven", "level", level.DebugValue())
29 l.Log("msg", "eight", "level", level.InfoValue())
30 l.Log("msg", "nine", "level", "undefined")
31 l.Log("msg", "ten", "level", level.WarnValue())
32
33 l.Log("level", level.ErrorValue(), "msg")
34 l.Log("msg", "eleven", "level")
35
36 want := []string{
37 "warning: level=warn msg=one\n",
38 "info: level=undefined msg=two\n",
39 "info: level=info msg=three\n",
40 "err: level=error msg=four\n",
41 "debug: level=debug msg=five\n",
42
43 "err: msg=six level=error\n",
44 "debug: msg=seven level=debug\n",
45 "info: msg=eight level=info\n",
46 "info: msg=nine level=undefined\n",
47 "warning: msg=ten level=warn\n",
48
49 "err: level=error msg=null\n",
50 "info: msg=eleven level=null\n",
51 }
52 have := w.writes
53 if !reflect.DeepEqual(want, have) {
54 t.Errorf("wrong writes: want %s, have %s", want, have)
55 }
56 }
57
58 func TestSyslogLoggerExhaustivePrioritySelector(t *testing.T) {
59 w := &testSyslogWriter{}
60 selector := func(keyvals ...interface{}) gosyslog.Priority {
61 for i := 0; i < len(keyvals); i += 2 {
62 if keyvals[i] == level.Key() {
63 if v, ok := keyvals[i+1].(string); ok {
64 switch v {
65 case "emergency":
66 return gosyslog.LOG_EMERG
67 case "alert":
68 return gosyslog.LOG_ALERT
69 case "critical":
70 return gosyslog.LOG_CRIT
71 case "error":
72 return gosyslog.LOG_ERR
73 case "warning":
74 return gosyslog.LOG_WARNING
75 case "notice":
76 return gosyslog.LOG_NOTICE
77 case "info":
78 return gosyslog.LOG_INFO
79 case "debug":
80 return gosyslog.LOG_DEBUG
81 }
82 return gosyslog.LOG_LOCAL0
83 }
84 }
85 }
86 return gosyslog.LOG_LOCAL0
87 }
88 l := NewSyslogLogger(w, log.NewLogfmtLogger, PrioritySelectorOption(selector))
89
90 l.Log("level", "warning", "msg", "one")
91 l.Log("level", "error", "msg", "two")
92 l.Log("level", "critical", "msg", "three")
93 l.Log("level", "debug", "msg", "four")
94 l.Log("level", "info", "msg", "five")
95 l.Log("level", "alert", "msg", "six")
96 l.Log("level", "emergency", "msg", "seven")
97 l.Log("level", "notice", "msg", "eight")
98 l.Log("level", "unknown", "msg", "nine")
99
100 want := []string{
101 "warning: level=warning msg=one\n",
102 "err: level=error msg=two\n",
103 "crit: level=critical msg=three\n",
104 "debug: level=debug msg=four\n",
105 "info: level=info msg=five\n",
106 "alert: level=alert msg=six\n",
107 "emerg: level=emergency msg=seven\n",
108 "notice: level=notice msg=eight\n",
109 "write: level=unknown msg=nine\n",
110 }
111 have := w.writes
112 if !reflect.DeepEqual(want, have) {
113 t.Errorf("wrong writes: want %s, have %s", want, have)
114 }
115 }
116
117 type testSyslogWriter struct {
118 writes []string
119 }
120
121 func (w *testSyslogWriter) Write(b []byte) (int, error) {
122 msg := string(b)
123 w.writes = append(w.writes, fmt.Sprintf("write: %s", msg))
124 return len(msg), nil
125 }
126
127 func (w *testSyslogWriter) Close() error {
128 return nil
129 }
130
131 func (w *testSyslogWriter) Emerg(msg string) error {
132 w.writes = append(w.writes, fmt.Sprintf("emerg: %s", msg))
133 return nil
134 }
135
136 func (w *testSyslogWriter) Alert(msg string) error {
137 w.writes = append(w.writes, fmt.Sprintf("alert: %s", msg))
138 return nil
139 }
140
141 func (w *testSyslogWriter) Crit(msg string) error {
142 w.writes = append(w.writes, fmt.Sprintf("crit: %s", msg))
143 return nil
144 }
145
146 func (w *testSyslogWriter) Err(msg string) error {
147 w.writes = append(w.writes, fmt.Sprintf("err: %s", msg))
148 return nil
149 }
150
151 func (w *testSyslogWriter) Warning(msg string) error {
152 w.writes = append(w.writes, fmt.Sprintf("warning: %s", msg))
153 return nil
154 }
155
156 func (w *testSyslogWriter) Notice(msg string) error {
157 w.writes = append(w.writes, fmt.Sprintf("notice: %s", msg))
158 return nil
159 }
160
161 func (w *testSyslogWriter) Info(msg string) error {
162 w.writes = append(w.writes, fmt.Sprintf("info: %s", msg))
163 return nil
164 }
165
166 func (w *testSyslogWriter) Debug(msg string) error {
167 w.writes = append(w.writes, fmt.Sprintf("debug: %s", msg))
168 return nil
169 }
170
View as plain text