[MM-18150] plugin panic trace should not be lost (#13559)

* Transit panic from debug to error

* Parse plugin's StdErr and output panic to the mlog.Error

* Add unit tests

* Change log test

* Remove buffer from logger

* Remove 'panic' string filter

* Change *Buffer to io.Writer

Co-authored-by: mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Shota Gvinepadze
2020-03-11 11:41:11 +04:00
коммит произвёл GitHub
родитель 771574b652
Коммит 5d928b4f94
6 изменённых файлов: 76 добавлений и 6 удалений

Просмотреть файл

@@ -144,6 +144,15 @@ func (l *Logger) StdLogWriter() io.Writer {
return &loggerWriter{f}
}
// StdErrPanicLogWriter returns a writer that can be hooked up to the output of a golang standard logger
// all of the stderr will be interpreted as log entry.
func (l *Logger) StdErrPanicLogWriter() io.Writer {
newLogger := *l
newLogger.zap = newLogger.zap.WithOptions(zap.AddCallerSkip(4), getStdLogOption())
f := newLogger.Error
return &panicLoggerWriter{f}
}
func (l *Logger) WithCallerSkip(skip int) *Logger {
newlogger := *l
newlogger.zap = newlogger.zap.WithOptions(zap.AddCallerSkip(skip))

Просмотреть файл

@@ -85,3 +85,13 @@ func (l *loggerWriter) Write(p []byte) (int, error) {
}
return len(p), nil
}
type panicLoggerWriter struct {
logFunc func(msg string, fields ...Field)
}
func (l *panicLoggerWriter) Write(p []byte) (int, error) {
trimmed := string(bytes.TrimSpace(p))
l.logFunc(trimmed)
return len(p), nil
}

Просмотреть файл

@@ -4,6 +4,7 @@
package mlog
import (
"io"
"strings"
"testing"
@@ -23,9 +24,10 @@ func (tw *testingWriter) Write(b []byte) (int, error) {
// NewTestingLogger creates a Logger that proxies logs through a testing interface.
// This allows tests that spin up App instances to avoid spewing logs unless the test fails or -verbose is specified.
func NewTestingLogger(tb testing.TB) *Logger {
func NewTestingLogger(tb testing.TB, writer io.Writer) *Logger {
logWriter := &testingWriter{tb}
logWriterSync := zapcore.AddSync(logWriter)
multiWriter := io.MultiWriter(logWriter, writer)
logWriterSync := zapcore.AddSync(multiWriter)
testingLogger := &Logger{
consoleLevel: zap.NewAtomicLevelAt(getZapLevel("debug")),