Use the logger with proper handling of dynamic debug on 2 locations

Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
pull/30708/head
Benoit Tigeot 5 months ago
parent cbaac7652d
commit e7eedae97c
No known key found for this signature in database
GPG Key ID: 8E6D4FC8AEBDA62C

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package cli
package logging
import (
"context"
@ -22,16 +22,20 @@ import (
"os"
)
// DebugEnabledFunc is a function type that determines if debug logging is enabled
// We use a function because we want to check the setting at log time, not when the logger is created
type DebugEnabledFunc func() bool
// DebugCheckHandler checks settings.Debug at log time
type DebugCheckHandler struct {
handler slog.Handler
settings *EnvSettings
debugEnabled DebugEnabledFunc
}
// Enabled implements slog.Handler.Enabled
func (h *DebugCheckHandler) Enabled(_ context.Context, level slog.Level) bool {
if level == slog.LevelDebug {
return h.settings.Debug // Check settings.Debug at log time
return h.debugEnabled()
}
return true // Always log other levels
}
@ -45,7 +49,7 @@ func (h *DebugCheckHandler) Handle(ctx context.Context, r slog.Record) error {
func (h *DebugCheckHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
return &DebugCheckHandler{
handler: h.handler.WithAttrs(attrs),
settings: h.settings,
debugEnabled: h.debugEnabled,
}
}
@ -53,12 +57,12 @@ func (h *DebugCheckHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
func (h *DebugCheckHandler) WithGroup(name string) slog.Handler {
return &DebugCheckHandler{
handler: h.handler.WithGroup(name),
settings: h.settings,
debugEnabled: h.debugEnabled,
}
}
// NewLogger creates a new logger with dynamic debug checking
func NewLogger(settings *EnvSettings) *slog.Logger {
func NewLogger(debugEnabled DebugEnabledFunc) *slog.Logger {
// Create base handler that removes timestamps
baseHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
// Always use LevelDebug here to allow all messages through
@ -76,7 +80,7 @@ func NewLogger(settings *EnvSettings) *slog.Logger {
// Wrap with our dynamic debug-checking handler
dynamicHandler := &DebugCheckHandler{
handler: baseHandler,
settings: settings,
debugEnabled: debugEnabled,
}
return slog.New(dynamicHandler)

@ -378,8 +378,6 @@ func (cfg *Configuration) Init(getter genericclioptions.RESTClientGetter, namesp
clientFn: kc.Factory.KubernetesClientSet,
}
// slog.SetDefault()
var store *storage.Storage
switch helmDriver {
case "secret", "secrets", "":

@ -20,12 +20,12 @@ import (
"fmt"
"io"
"log/slog"
"os"
"testing"
"github.com/stretchr/testify/assert"
fakeclientset "k8s.io/client-go/kubernetes/fake"
"helm.sh/helm/v4/internal/logging"
chart "helm.sh/helm/v4/pkg/chart/v2"
chartutil "helm.sh/helm/v4/pkg/chart/v2/util"
kubefake "helm.sh/helm/v4/pkg/kube/fake"
@ -41,21 +41,9 @@ var verbose = flag.Bool("test.log", false, "enable test logging (debug by defaul
func actionConfigFixture(t *testing.T) *Configuration {
t.Helper()
logger := slog.New(slog.NewTextHandler(io.Discard, nil))
if *verbose {
// Create a handler that removes timestamps
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
ReplaceAttr: func(_ []string, a slog.Attr) slog.Attr {
// Remove the time attribute
if a.Key == slog.TimeKey {
return slog.Attr{}
}
return a
},
logger := logging.NewLogger(func() bool {
return *verbose
})
logger = slog.New(handler)
}
slog.SetDefault(logger)
registryClient, err := registry.NewClient()

@ -32,6 +32,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
"helm.sh/helm/v4/internal/logging"
"helm.sh/helm/v4/internal/tlsutil"
"helm.sh/helm/v4/pkg/action"
"helm.sh/helm/v4/pkg/cli"
@ -139,7 +140,7 @@ func newRootCmdWithConfig(actionConfig *action.Configuration, out io.Writer, arg
settings.AddFlags(flags)
addKlogFlags(flags)
logger := cli.NewLogger(settings)
logger := logging.NewLogger(func() bool { return settings.Debug })
slog.SetDefault(logger)
// Setup shell completion for the namespace flag

Loading…
Cancel
Save