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