Merge pull request #103025 from serathius/logr-simplify

Simplify zap logger initialization
This commit is contained in:
Kubernetes Prow Robot 2021-06-22 02:59:58 -07:00 committed by GitHub
commit ae666361cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,7 @@ limitations under the License.
package logs package logs
import ( import (
"os"
"time" "time"
"github.com/go-logr/logr" "github.com/go-logr/logr"
@ -35,38 +36,25 @@ var (
) )
func init() { func init() {
JSONLogger = NewJSONLogger(nil) JSONLogger = NewJSONLogger(zapcore.Lock(os.Stdout))
} }
// NewJSONLogger creates a new json logr.Logger using the given Zap Logger to log. // NewJSONLogger creates a new json logr.Logger using the given Zap Logger to log.
func NewJSONLogger(w zapcore.WriteSyncer) logr.Logger { func NewJSONLogger(w zapcore.WriteSyncer) logr.Logger {
l, _ := zapConfig.Build() encoder := zapcore.NewJSONEncoder(encoderConfig)
l = l.WithOptions(zap.AddCallerSkip(1)) core := zapcore.NewCore(encoder, zapcore.AddSync(w), zapcore.DebugLevel)
if w != nil { l := zap.New(core, zap.WithCaller(true), zap.AddCallerSkip(1))
l = l.WithOptions(zap.WrapCore(
func(zapcore.Core) zapcore.Core {
return zapcore.NewCore(zapcore.NewJSONEncoder(zapConfig.EncoderConfig), zapcore.AddSync(w), zapcore.DebugLevel)
}))
}
return &zapLogger{l: l} return &zapLogger{l: l}
} }
var zapConfig = zap.Config{ var encoderConfig = zapcore.EncoderConfig{
Level: zap.NewAtomicLevelAt(zap.DebugLevel), MessageKey: "msg",
Development: false,
Sampling: nil,
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
MessageKey: "msg",
CallerKey: "caller", CallerKey: "caller",
TimeKey: "ts", TimeKey: "ts",
EncodeTime: epochMillisTimeEncoder, EncodeTime: epochMillisTimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder, EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder, EncodeCaller: zapcore.ShortCallerEncoder,
},
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
} }
// this has the same implementation as zapcore.EpochMillisTimeEncoder but // this has the same implementation as zapcore.EpochMillisTimeEncoder but
@ -100,6 +88,13 @@ func (l *zapLogger) Info(msg string, keysAndVals ...interface{}) {
} }
} }
// Error write log message to error level
func (l *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) {
if checkedEntry := l.l.Check(zap.ErrorLevel, msg); checkedEntry != nil {
checkedEntry.Write(l.handleFields(keysAndVals, handleError(err))...)
}
}
// dPanic write message to DPanicLevel level log we need implement this because we need // dPanic write message to DPanicLevel level log we need implement this because we need
// to have the "v" field as well. // to have the "v" field as well.
func (l *zapLogger) dPanic(msg string) { func (l *zapLogger) dPanic(msg string) {
@ -147,13 +142,6 @@ func (l *zapLogger) handleFields(args []interface{}, additional ...zap.Field) []
return append(fields, additional...) return append(fields, additional...)
} }
// Error write log message to error level
func (l *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) {
if checkedEntry := l.l.Check(zap.ErrorLevel, msg); checkedEntry != nil {
checkedEntry.Write(l.handleFields(keysAndVals, handleError(err))...)
}
}
func handleError(err error) zap.Field { func handleError(err error) zap.Field {
return zap.NamedError("err", err) return zap.NamedError("err", err)
} }