mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
json: more flexible constructor
The encoder configuration can now be chosen by the caller. This will be used by a benchmark to write messages without caller and time stamp. While at it, some places where the logger was unnecessarily tested with split output streams writing into the same actual stream were replaced with writing as single stream. This is a leftover from a previous incarnation of the split output stream patch where identical streams were used instead of nil for the error stream to indicate "single stream".
This commit is contained in:
parent
a0dfd958d5
commit
40b38f09d9
@ -36,8 +36,20 @@ var (
|
||||
|
||||
// NewJSONLogger creates a new json logr.Logger and its associated
|
||||
// flush function. The separate error stream is optional and may be nil.
|
||||
func NewJSONLogger(infoStream, errorStream zapcore.WriteSyncer) (logr.Logger, func()) {
|
||||
encoder := zapcore.NewJSONEncoder(encoderConfig)
|
||||
// The encoder config is also optional.
|
||||
func NewJSONLogger(infoStream, errorStream zapcore.WriteSyncer, encoderConfig *zapcore.EncoderConfig) (logr.Logger, func()) {
|
||||
if encoderConfig == nil {
|
||||
encoderConfig = &zapcore.EncoderConfig{
|
||||
MessageKey: "msg",
|
||||
CallerKey: "caller",
|
||||
TimeKey: "ts",
|
||||
EncodeTime: epochMillisTimeEncoder,
|
||||
EncodeDuration: zapcore.StringDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
}
|
||||
|
||||
encoder := zapcore.NewJSONEncoder(*encoderConfig)
|
||||
var core zapcore.Core
|
||||
if errorStream == nil {
|
||||
core = zapcore.NewCore(encoder, infoStream, zapcore.Level(-127))
|
||||
@ -59,15 +71,6 @@ func NewJSONLogger(infoStream, errorStream zapcore.WriteSyncer) (logr.Logger, fu
|
||||
}
|
||||
}
|
||||
|
||||
var encoderConfig = zapcore.EncoderConfig{
|
||||
MessageKey: "msg",
|
||||
CallerKey: "caller",
|
||||
TimeKey: "ts",
|
||||
EncodeTime: epochMillisTimeEncoder,
|
||||
EncodeDuration: zapcore.StringDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
|
||||
func epochMillisTimeEncoder(_ time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
nanos := timeNow().UnixNano()
|
||||
millis := float64(nanos) / float64(time.Millisecond)
|
||||
@ -95,8 +98,8 @@ func (f Factory) Create(options config.FormatOptions) (logr.Logger, func()) {
|
||||
}
|
||||
}
|
||||
// stdout for info messages, stderr for errors.
|
||||
return NewJSONLogger(stdout, stderr)
|
||||
return NewJSONLogger(stdout, stderr, nil)
|
||||
}
|
||||
// Write info messages and errors to stderr to prevent mixing with normal program output.
|
||||
return NewJSONLogger(stderr, nil)
|
||||
return NewJSONLogger(stderr, nil, nil)
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import (
|
||||
var writer = zapcore.AddSync(&writeSyncer{})
|
||||
|
||||
func BenchmarkInfoLoggerInfo(b *testing.B) {
|
||||
logger, _ := NewJSONLogger(writer, writer)
|
||||
logger, _ := NewJSONLogger(writer, nil, nil)
|
||||
b.ResetTimer()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
@ -55,7 +55,7 @@ func BenchmarkInfoLoggerInfo(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkZapLoggerError(b *testing.B) {
|
||||
logger, _ := NewJSONLogger(writer, writer)
|
||||
logger, _ := NewJSONLogger(writer, nil, nil)
|
||||
b.ResetTimer()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
@ -85,7 +85,7 @@ func BenchmarkZapLoggerError(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkZapLoggerV(b *testing.B) {
|
||||
logger, _ := NewJSONLogger(writer, writer)
|
||||
logger, _ := NewJSONLogger(writer, nil, nil)
|
||||
b.ResetTimer()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
|
@ -64,7 +64,7 @@ func TestZapLoggerInfo(t *testing.T) {
|
||||
for _, data := range testDataInfo {
|
||||
var buffer bytes.Buffer
|
||||
writer := zapcore.AddSync(&buffer)
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil)
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil, nil)
|
||||
sampleInfoLogger.Info(data.msg, data.keysValues...)
|
||||
logStr := buffer.String()
|
||||
|
||||
@ -94,7 +94,7 @@ func TestZapLoggerInfo(t *testing.T) {
|
||||
|
||||
// TestZapLoggerEnabled test ZapLogger enabled
|
||||
func TestZapLoggerEnabled(t *testing.T) {
|
||||
sampleInfoLogger, _ := NewJSONLogger(nil, nil)
|
||||
sampleInfoLogger, _ := NewJSONLogger(nil, nil, nil)
|
||||
for i := 0; i < 11; i++ {
|
||||
if !sampleInfoLogger.V(i).Enabled() {
|
||||
t.Errorf("V(%d).Info should be enabled", i)
|
||||
@ -111,7 +111,7 @@ func TestZapLoggerV(t *testing.T) {
|
||||
for i := 0; i < 11; i++ {
|
||||
var buffer bytes.Buffer
|
||||
writer := zapcore.AddSync(&buffer)
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil)
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil, nil)
|
||||
sampleInfoLogger.V(i).Info("test", "ns", "default", "podnum", 2, "time", time.Microsecond)
|
||||
logStr := buffer.String()
|
||||
var v, lineNo int
|
||||
@ -138,7 +138,7 @@ func TestZapLoggerError(t *testing.T) {
|
||||
timeNow = func() time.Time {
|
||||
return time.Date(1970, time.January, 1, 0, 0, 0, 123, time.UTC)
|
||||
}
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil)
|
||||
sampleInfoLogger, _ := NewJSONLogger(writer, nil, nil)
|
||||
sampleInfoLogger.Error(fmt.Errorf("invalid namespace:%s", "default"), "wrong namespace", "ns", "default", "podnum", 2, "time", time.Microsecond)
|
||||
logStr := buffer.String()
|
||||
var ts float64
|
||||
@ -156,7 +156,7 @@ func TestZapLoggerError(t *testing.T) {
|
||||
|
||||
func TestZapLoggerStreams(t *testing.T) {
|
||||
var infoBuffer, errorBuffer bytes.Buffer
|
||||
log, _ := NewJSONLogger(zapcore.AddSync(&infoBuffer), zapcore.AddSync(&errorBuffer))
|
||||
log, _ := NewJSONLogger(zapcore.AddSync(&infoBuffer), zapcore.AddSync(&errorBuffer), nil)
|
||||
|
||||
log.Error(fmt.Errorf("some error"), "failed")
|
||||
log.Info("hello world")
|
||||
|
@ -239,7 +239,7 @@ func TestKlogIntegration(t *testing.T) {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
var buffer bytes.Buffer
|
||||
writer := zapcore.AddSync(&buffer)
|
||||
logger, _ := NewJSONLogger(writer, writer)
|
||||
logger, _ := NewJSONLogger(writer, nil, nil)
|
||||
klog.SetLogger(logger)
|
||||
defer klog.ClearLogger()
|
||||
|
||||
@ -270,7 +270,7 @@ func TestKlogIntegration(t *testing.T) {
|
||||
func TestKlogV(t *testing.T) {
|
||||
var buffer testBuff
|
||||
writer := zapcore.AddSync(&buffer)
|
||||
logger, _ := NewJSONLogger(writer, writer)
|
||||
logger, _ := NewJSONLogger(writer, nil, nil)
|
||||
klog.SetLogger(logger)
|
||||
defer klog.ClearLogger()
|
||||
fs := flag.FlagSet{}
|
||||
|
Loading…
Reference in New Issue
Block a user