diff --git a/common/loggers/logger.go b/common/loggers/logger.go index a013049f770..785405033e8 100644 --- a/common/loggers/logger.go +++ b/common/loggers/logger.go @@ -173,6 +173,7 @@ func LevelLoggerToWriter(l logg.LevelLogger) io.Writer { type Logger interface { Debug() logg.LevelLogger + DebugCommand(command string) logg.LevelLogger Debugf(format string, v ...any) Debugln(v ...any) Error() logg.LevelLogger @@ -221,6 +222,10 @@ func (l *logAdapter) Debug() logg.LevelLogger { return l.debugl } +func (l *logAdapter) DebugCommand(command string) logg.LevelLogger { + return l.debugl.WithField(FieldNameCmd, command) +} + func (l *logAdapter) Debugf(format string, v ...any) { l.debugl.Logf(format, v...) } diff --git a/resources/images/codec.go b/resources/images/codec.go index 16840ac341e..3b1e0f38322 100644 --- a/resources/images/codec.go +++ b/resources/images/codec.go @@ -27,6 +27,7 @@ import ( "io" "github.com/bep/imagemeta" + "github.com/bep/logg" "github.com/gohugoio/hugo/common/himage" "golang.org/x/image/bmp" "golang.org/x/image/tiff" @@ -56,14 +57,23 @@ type EncodeDecoder interface { // Codec is a generic image codec supporting multiple formats. type Codec struct { - webp EncodeDecoder + webp EncodeDecoder + debugl logg.LevelLogger } -func newCodec(webp EncodeDecoder) *Codec { - return &Codec{webp: webp} +func newCodec(webp EncodeDecoder, debugl logg.LevelLogger) *Codec { + return &Codec{webp: webp, debugl: debugl} } func (d *Codec) EncodeTo(conf ImageConfig, w io.Writer, img image.Image) error { + d.debugl.Log( + // This construct looks odd, but the func will only be called if debug is enabled. + logg.StringFunc( + func() string { + return fmt.Sprintf("Encoding image to format %s with config %+v", conf.TargetFormat, conf) + }, + ), + ) switch conf.TargetFormat { case JPEG: var rgba *image.RGBA @@ -144,6 +154,13 @@ func (d *Codec) EncodeTo(conf ImageConfig, w io.Writer, img image.Image) error { } func (d *Codec) DecodeFormat(f Format, r io.Reader) (image.Image, error) { + d.debugl.Log( + logg.StringFunc( + func() string { + return fmt.Sprintf("Decoding image from format %s", f) + }, + ), + ) switch f { case JPEG, PNG: // We reworked this decode/encode setup to get full WebP support in v0.153.0. @@ -192,6 +209,13 @@ func (d *Codec) DecodeFormat(f Format, r io.Reader) (image.Image, error) { } func (d *Codec) Decode(r io.Reader) (image.Image, error) { + d.debugl.Log( + logg.StringFunc( + func() string { + return "Decoding image from unknown format" + }, + ), + ) rr := toPeekReader(r) format, err := formatFromImage(rr) if err != nil { diff --git a/resources/images/image.go b/resources/images/image.go index 80648f5f282..24519c1f18f 100644 --- a/resources/images/image.go +++ b/resources/images/image.go @@ -124,7 +124,7 @@ func (i *Image) initConfig() error { return nil } -func NewImageProcessor(warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatchers, cfg *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]) (*ImageProcessor, error) { +func NewImageProcessor(debugl, warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatchers, cfg *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]) (*ImageProcessor, error) { e := cfg.Config.Imaging.Exif exifDecoder, err := meta.NewDecoder( meta.WithDateDisabled(e.DisableDate), @@ -154,7 +154,7 @@ func NewImageProcessor(warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatcher if webpCodec == nil { return nil, errors.New("webp codec is not available") } - imageCodec := newCodec(webpCodec) + imageCodec := newCodec(webpCodec, debugl) return &ImageProcessor{ Cfg: cfg, diff --git a/resources/resource_spec.go b/resources/resource_spec.go index 70ec2cf0a7a..c80a0bbf943 100644 --- a/resources/resource_spec.go +++ b/resources/resource_spec.go @@ -62,9 +62,10 @@ func NewSpec( conf := s.Cfg.GetConfig().(*allconfig.Config) imgConfig := conf.Imaging + imagesDebugl := logger.DebugCommand("images") imagesWarnl := logger.WarnCommand("images") - imaging, err := images.NewImageProcessor(imagesWarnl, wasmDispatchers, imgConfig) + imaging, err := images.NewImageProcessor(imagesDebugl, imagesWarnl, wasmDispatchers, imgConfig) if err != nil { return nil, err }