From 7c9fada778e91976d4ba1cbe942235a9bbeaf5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 16 Jun 2023 08:17:42 +0200 Subject: Replace the old log setup, with structured logging etc. Fixes #11124 --- tpl/fmt/fmt.go | 51 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 14 deletions(-) (limited to 'tpl/fmt') diff --git a/tpl/fmt/fmt.go b/tpl/fmt/fmt.go index 0667bcedd..c0d75e425 100644 --- a/tpl/fmt/fmt.go +++ b/tpl/fmt/fmt.go @@ -16,27 +16,22 @@ package fmt import ( _fmt "fmt" + "sort" + "github.com/bep/logg" "github.com/gohugoio/hugo/common/loggers" - "github.com/gohugoio/hugo/deps" - "github.com/gohugoio/hugo/helpers" + "github.com/spf13/cast" ) // New returns a new instance of the fmt-namespaced template functions. func New(d *deps.Deps) *Namespace { - ignorableLogger, ok := d.Log.(loggers.IgnorableLogger) - if !ok { - ignorableLogger = loggers.NewIgnorableLogger(d.Log, nil) - } - - distinctLogger := helpers.NewDistinctLogger(d.Log) ns := &Namespace{ - distinctLogger: ignorableLogger.Apply(distinctLogger), + logger: d.Log, } d.BuildStartListeners.Add(func() { - ns.distinctLogger.Reset() + ns.logger.Reset() }) return ns @@ -44,7 +39,7 @@ func New(d *deps.Deps) *Namespace { // Namespace provides template functions for the "fmt" namespace. type Namespace struct { - distinctLogger loggers.IgnorableLogger + logger loggers.Logger } // Print returns a string representation of args. @@ -65,7 +60,7 @@ func (ns *Namespace) Println(args ...any) string { // Errorf formats args according to a format specifier and logs an ERROR. // It returns an empty string. func (ns *Namespace) Errorf(format string, args ...any) string { - ns.distinctLogger.Errorf(format, args...) + ns.logger.Errorf(format, args...) return "" } @@ -73,13 +68,41 @@ func (ns *Namespace) Errorf(format string, args ...any) string { // an information text that the error with the given id can be suppressed in config. // It returns an empty string. func (ns *Namespace) Erroridf(id, format string, args ...any) string { - ns.distinctLogger.Errorsf(id, format, args...) + ns.logger.Errorsf(id, format, args...) return "" } // Warnf formats args according to a format specifier and logs a WARNING. // It returns an empty string. func (ns *Namespace) Warnf(format string, args ...any) string { - ns.distinctLogger.Warnf(format, args...) + ns.logger.Warnf(format, args...) + return "" +} + +// Warnmf is epxermimental and subject to change at any time. +func (ns *Namespace) Warnmf(m any, format string, args ...any) string { + return ns.logmf(ns.logger.Warn(), m, format, args...) +} + +// Errormf is epxermimental and subject to change at any time. +func (ns *Namespace) Errormf(m any, format string, args ...any) string { + return ns.logmf(ns.logger.Error(), m, format, args...) +} + +func (ns *Namespace) logmf(l logg.LevelLogger, m any, format string, args ...any) string { + mm := cast.ToStringMap(m) + fields := make(logg.Fields, len(mm)) + i := 0 + for k, v := range mm { + fields[i] = logg.Field{Name: k, Value: v} + i++ + } + // Sort the fields to make the output deterministic. + sort.Slice(fields, func(i, j int) bool { + return fields[i].Name < fields[j].Name + }) + + l.WithFields(fields).Logf(format, args...) + return "" } -- cgit v1.2.3