github.com/adacta-ru/mattermost-server/v5@v5.31.1/mlog/testing.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package mlog 5 6 import ( 7 "io" 8 "strings" 9 "sync" 10 "testing" 11 12 "go.uber.org/zap" 13 "go.uber.org/zap/zapcore" 14 ) 15 16 // testingWriter is an io.Writer that writes through t.Log 17 type testingWriter struct { 18 tb testing.TB 19 } 20 21 func (tw *testingWriter) Write(b []byte) (int, error) { 22 tw.tb.Log(strings.TrimSpace(string(b))) 23 return len(b), nil 24 } 25 26 // NewTestingLogger creates a Logger that proxies logs through a testing interface. 27 // This allows tests that spin up App instances to avoid spewing logs unless the test fails or -verbose is specified. 28 func NewTestingLogger(tb testing.TB, writer io.Writer) *Logger { 29 logWriter := &testingWriter{tb} 30 multiWriter := io.MultiWriter(logWriter, writer) 31 logWriterSync := zapcore.AddSync(multiWriter) 32 33 testingLogger := &Logger{ 34 consoleLevel: zap.NewAtomicLevelAt(getZapLevel("debug")), 35 fileLevel: zap.NewAtomicLevelAt(getZapLevel("info")), 36 logrLogger: newLogr(), 37 mutex: &sync.RWMutex{}, 38 } 39 40 logWriterCore := zapcore.NewCore(makeEncoder(true), zapcore.Lock(logWriterSync), testingLogger.consoleLevel) 41 42 testingLogger.zap = zap.New(logWriterCore, 43 zap.AddCaller(), 44 ) 45 return testingLogger 46 }