Merge pull request #102620 from serathius/zap-sampling

Disable zap sampling and cleanup config
This commit is contained in:
Kubernetes Prow Robot 2021-06-07 01:56:39 -07:00 committed by GitHub
commit f1f58f20ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,7 +17,6 @@ limitations under the License.
package logs package logs
import ( import (
"os"
"time" "time"
"github.com/go-logr/logr" "github.com/go-logr/logr"
@ -35,6 +34,38 @@ var (
timeNow = time.Now timeNow = time.Now
) )
func init() {
JSONLogger = NewJSONLogger(nil)
}
// 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)
}))
}
return &zapLogger{l: l}
}
var zapConfig = zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
Development: false,
Sampling: nil,
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
MessageKey: "msg",
TimeKey: "ts",
EncodeTime: zapcore.EpochMillisTimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
},
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stderr"},
}
// zapLogger is a logr.Logger that uses Zap to record log. // zapLogger is a logr.Logger that uses Zap to record log.
type zapLogger struct { type zapLogger struct {
// NB: this looks very similar to zap.SugaredLogger, but // NB: this looks very similar to zap.SugaredLogger, but
@ -43,7 +74,7 @@ type zapLogger struct {
lvl int lvl int
} }
// implement logr.Logger // zapLogger implement logr.Logger
var _ logr.Logger = &zapLogger{} var _ logr.Logger = &zapLogger{}
// Enabled should always return true // Enabled should always return true
@ -124,6 +155,10 @@ func (l *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) {
checkedEntry.Write(l.handleFields(keysAndVals, handleError(err))...) checkedEntry.Write(l.handleFields(keysAndVals, handleError(err))...)
} }
func handleError(err error) zap.Field {
return zap.NamedError("err", err)
}
// V return info logr.Logger with specified level // V return info logr.Logger with specified level
func (l *zapLogger) V(level int) logr.Logger { func (l *zapLogger) V(level int) logr.Logger {
return &zapLogger{ return &zapLogger{
@ -143,36 +178,3 @@ func (l *zapLogger) WithName(name string) logr.Logger {
l.l = l.l.Named(name) l.l = l.l.Named(name)
return l return l
} }
// encoderConfig config zap encodetime format
var encoderConfig = zapcore.EncoderConfig{
MessageKey: "msg",
TimeKey: "ts",
EncodeTime: zapcore.EpochMillisTimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
}
// NewJSONLogger creates a new json logr.Logger using the given Zap Logger to log.
func NewJSONLogger(w zapcore.WriteSyncer) logr.Logger {
l, _ := zap.NewProduction()
if w == nil {
w = os.Stdout
}
log := l.WithOptions(zap.AddCallerSkip(1),
zap.WrapCore(
func(zapcore.Core) zapcore.Core {
return zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), zapcore.AddSync(w), zapcore.DebugLevel)
}))
return &zapLogger{
l: log,
}
}
func handleError(err error) zap.Field {
return zap.NamedError("err", err)
}
func init() {
JSONLogger = NewJSONLogger(nil)
}