github.com/go-kit/log@v0.2.1/syslog/syslog_test.go (about) 1 //go:build !windows && !plan9 && !nacl 2 // +build !windows,!plan9,!nacl 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 }