Open cmoulliard opened 8 months ago
I absolutely agree with this.
I discovered another issue as we cannot change the time format of the zap logger We are still getting milliSeconds even if we request to show the time using iso8601
./idpbuilder create --buildName local --recreate --zap-encoder console --kubeVersion v1.27.3 --zap-time-encoding iso8601
1.6983354005798452e+09 INFO setup Creating kind cluster
Creating kind cluster local
...
This is a bit better if I set myself the format:
root.go
...
zapfs := flag.NewFlagSet("zap", flag.ExitOnError)
opts := zap.Options{
Development: true,
TimeEncoder: zapcore.TimeEncoder(zapcore.ISO8601TimeEncoder),
}
...
make
./idpbuilder create --buildName local --recreate --zap-encoder console --kubeVersion v1.27.3 --zap-time-encoding iso8601
2023-10-26T17:53:08.796+0200 INFO setup Creating kind cluster
Creating kind cluster local
...
Some improvements propositions -->
opts := zap.Options{
Development: true,
TimeEncoder: zapcore.TimeEncoder(func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
// enc.AppendString(t.UTC().Format("2006-01-02T15:04"))
// 2019-08-13T04:39:11Z
enc.AppendString(t.Format(time.Stamp))
// Oct 26 17:58:55
}),
}
@greghaynes @nabuskey
A better zap format should be this one
customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
}
customCallerEncoder := func(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString("[" + caller.TrimmedPath() + "]")
}
zapLoggerEncoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "message",
StacktraceKey: "stacktrace",
EncodeCaller: customCallerEncoder,
EncodeTime: customTimeEncoder,
EncodeLevel: zapcore.CapitalColorLevelEncoder,,
EncodeDuration: zapcore.SecondsDurationEncoder,
LineEnding: "\n",
ConsoleSeparator: " ",
}
zapfs := flag.NewFlagSet("zap", flag.ExitOnError)
opts := zap.Options{
Development: true,
Encoder: zapcore.NewConsoleEncoder(zapLoggerEncoderConfig),
}
opts.BindFlags(zapfs)
CreateCmd.Flags().AddGoFlagSet(zapfs)
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
which produces
Remark: The controller logger only supports 2 levels: INFO
ERROR
but no DEBUG
!!
WDYT ? @greghaynes @nabuskey @jessesanford
We should certainly look to the new go Logger (which corresponds to what we can use with languages such as ; Java ;-) - https://go.dev/blog/slog
Great blog post: https://betterstack.com/community/guides/logging/logging-in-go/ Resources page: https://github.com/golang/go/wiki/Resources-for-slog
opts := &slog.HandlerOptions{
Level: slog.LevelDebug,
}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
slog.SetDefault(logger)
logger.Info("An info message")
logger.Warn("A warning message")
logger.Debug("A debug message")
Issue
Some of the messages logged cannot be read very easily when they appear within the console/terminal
TODO
fmt.print
andzap logger
@greghaynes @nabuskey