...

Source file src/github.com/go-kit/kit/log/logrus/logrus_logger_test.go

Documentation: github.com/go-kit/kit/log/logrus

     1  package logrus_test
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"errors"
     7  	"strings"
     8  	"testing"
     9  
    10  	log "github.com/go-kit/kit/log/logrus"
    11  	"github.com/sirupsen/logrus"
    12  )
    13  
    14  func TestLogrusLogger(t *testing.T) {
    15  	t.Parallel()
    16  	buf := &bytes.Buffer{}
    17  	logrusLogger := logrus.New()
    18  	logrusLogger.Out = buf
    19  	logrusLogger.Formatter = &logrus.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true}
    20  	logger := log.NewLogger(logrusLogger)
    21  
    22  	if err := logger.Log("hello", "world"); err != nil {
    23  		t.Fatal(err)
    24  	}
    25  	if want, have := "hello=world\n", strings.Split(buf.String(), " ")[3]; want != have {
    26  		t.Errorf("want %#v, have %#v", want, have)
    27  	}
    28  
    29  	buf.Reset()
    30  	if err := logger.Log("a", 1, "err", errors.New("error")); err != nil {
    31  		t.Fatal(err)
    32  	}
    33  	if want, have := "a=1 err=error", strings.TrimSpace(strings.SplitAfterN(buf.String(), " ", 4)[3]); want != have {
    34  		t.Errorf("want %#v, have %#v", want, have)
    35  	}
    36  
    37  	buf.Reset()
    38  	if err := logger.Log("a", 1, "b"); err != nil {
    39  		t.Fatal(err)
    40  	}
    41  	if want, have := "a=1 b=\"(MISSING)\"", strings.TrimSpace(strings.SplitAfterN(buf.String(), " ", 4)[3]); want != have {
    42  		t.Errorf("want %#v, have %#v", want, have)
    43  	}
    44  
    45  	buf.Reset()
    46  	if err := logger.Log("my_map", mymap{0: 0}); err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	if want, have := "my_map=special_behavior", strings.TrimSpace(strings.Split(buf.String(), " ")[3]); want != have {
    50  		t.Errorf("want %#v, have %#v", want, have)
    51  	}
    52  }
    53  
    54  type mymap map[int]int
    55  
    56  func (m mymap) String() string { return "special_behavior" }
    57  
    58  func TestWithLevel(t *testing.T) {
    59  	tests := []struct {
    60  		name          string
    61  		level         logrus.Level
    62  		expectedLevel logrus.Level
    63  	}{
    64  		{
    65  			name:          "Test Debug level",
    66  			level:         logrus.DebugLevel,
    67  			expectedLevel: logrus.DebugLevel,
    68  		},
    69  		{
    70  			name:          "Test Error level",
    71  			level:         logrus.ErrorLevel,
    72  			expectedLevel: logrus.ErrorLevel,
    73  		},
    74  		{
    75  			name:          "Test Warn level",
    76  			level:         logrus.WarnLevel,
    77  			expectedLevel: logrus.WarnLevel,
    78  		},
    79  		{
    80  			name:          "Test Info level",
    81  			level:         logrus.InfoLevel,
    82  			expectedLevel: logrus.InfoLevel,
    83  		},
    84  		{
    85  			name:          "Test Trace level",
    86  			level:         logrus.TraceLevel,
    87  			expectedLevel: logrus.TraceLevel,
    88  		},
    89  		{
    90  			name:          "Test not existing level",
    91  			level:         999,
    92  			expectedLevel: logrus.InfoLevel,
    93  		},
    94  	}
    95  	for _, tt := range tests {
    96  		buf := &bytes.Buffer{}
    97  		logrusLogger := logrus.New()
    98  		logrusLogger.Out = buf
    99  		logrusLogger.Level = tt.level
   100  		logrusLogger.Formatter = &logrus.JSONFormatter{}
   101  		logger := log.NewLogger(logrusLogger, log.WithLevel(tt.level))
   102  
   103  		t.Run(tt.name, func(t *testing.T) {
   104  			if err := logger.Log(); err != nil {
   105  				t.Fatal(err)
   106  			}
   107  
   108  			l := map[string]interface{}{}
   109  			if err := json.Unmarshal(buf.Bytes(), &l); err != nil {
   110  				t.Fatal(err)
   111  			}
   112  
   113  			if v, ok := l["level"].(string); !ok || v != tt.expectedLevel.String() {
   114  				t.Fatalf("Logging levels doesn't match. Expected: %s, got: %s", tt.level, v)
   115  			}
   116  
   117  		})
   118  	}
   119  }
   120  

View as plain text