github.com/theQRL/go-zond@v0.1.1/log/logger_test.go (about)

     1  package log
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  // TestLoggingWithTrace checks that if BackTraceAt is set, then the
    11  // gloghandler is capable of spitting out a stacktrace
    12  func TestLoggingWithTrace(t *testing.T) {
    13  	defer stackEnabled.Store(stackEnabled.Load())
    14  	out := new(bytes.Buffer)
    15  	logger := New()
    16  	{
    17  		glog := NewGlogHandler(StreamHandler(out, TerminalFormat(false)))
    18  		glog.Verbosity(LvlTrace)
    19  		if err := glog.BacktraceAt("logger_test.go:24"); err != nil {
    20  			t.Fatal(err)
    21  		}
    22  		logger.SetHandler(glog)
    23  	}
    24  	logger.Trace("a message", "foo", "bar") // Will be bumped to INFO
    25  	have := out.String()
    26  	if !strings.HasPrefix(have, "INFO") {
    27  		t.Fatalf("backtraceat should bump level to info: %s", have)
    28  	}
    29  	// The timestamp is locale-dependent, so we want to trim that off
    30  	// "INFO [01-01|00:00:00.000] a messag ..." -> "a messag..."
    31  	have = strings.Split(have, "]")[1]
    32  	wantPrefix := " a message\n\ngoroutine"
    33  	if !strings.HasPrefix(have, wantPrefix) {
    34  		t.Errorf("\nhave: %q\nwant: %q\n", have, wantPrefix)
    35  	}
    36  }
    37  
    38  // TestLoggingWithVmodule checks that vmodule works.
    39  func TestLoggingWithVmodule(t *testing.T) {
    40  	defer stackEnabled.Store(stackEnabled.Load())
    41  	out := new(bytes.Buffer)
    42  	logger := New()
    43  	{
    44  		glog := NewGlogHandler(StreamHandler(out, TerminalFormat(false)))
    45  		glog.Verbosity(LvlCrit)
    46  		logger.SetHandler(glog)
    47  		logger.Warn("This should not be seen", "ignored", "true")
    48  		glog.Vmodule("logger_test.go=5")
    49  	}
    50  	logger.Trace("a message", "foo", "bar")
    51  	have := out.String()
    52  	// The timestamp is locale-dependent, so we want to trim that off
    53  	// "INFO [01-01|00:00:00.000] a messag ..." -> "a messag..."
    54  	have = strings.Split(have, "]")[1]
    55  	want := " a message                                foo=bar\n"
    56  	if have != want {
    57  		t.Errorf("\nhave: %q\nwant: %q\n", have, want)
    58  	}
    59  }
    60  
    61  func BenchmarkTraceLogging(b *testing.B) {
    62  	Root().SetHandler(LvlFilterHandler(LvlInfo, StreamHandler(os.Stderr, TerminalFormat(true))))
    63  	b.ResetTimer()
    64  	for i := 0; i < b.N; i++ {
    65  		Trace("a message", "v", i)
    66  	}
    67  }