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
import (
"os"
"time"
"github.com/go-logr/logr"
@ -35,38 +36,25 @@ var (
)
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.
func NewJSONLogger(w zapcore.WriteSyncer) logr.Logger {
l, _ := zapConfig.Build()
l = l.WithOptions(zap.AddCallerSkip(1))
if w != nil {
l = l.WithOptions(zap.WrapCore(
func(zapcore.Core) zapcore.Core {
return zapcore.NewCore(zapcore.NewJSONEncoder(zapConfig.EncoderConfig), zapcore.AddSync(w), zapcore.DebugLevel)
}))
}
encoder := zapcore.NewJSONEncoder(encoderConfig)
core := zapcore.NewCore(encoder, zapcore.AddSync(w), zapcore.DebugLevel)
l := zap.New(core, zap.WithCaller(true), zap.AddCallerSkip(1))
return &zapLogger{l: l}
}
var zapConfig = zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
Development: false,
Sampling: nil,
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
MessageKey: "msg",
var encoderConfig = zapcore.EncoderConfig{
MessageKey: "msg",
CallerKey: "caller",
TimeKey: "ts",
EncodeTime: epochMillisTimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
},
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
CallerKey: "caller",
TimeKey: "ts",
EncodeTime: epochMillisTimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// 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
// to have the "v" field as well.
func (l *zapLogger) dPanic(msg string) {
@ -147,13 +142,6 @@ func (l *zapLogger) handleFields(args []interface{}, additional ...zap.Field) []
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 {
return zap.NamedError("err", err)
}