79747298

Date: 2025-08-26 20:38:27
Score: 0.5
Natty:
Report link

Thanks for the help, for now I’ve come up with the following solution.

I created a shared package share with the following content:

package share

import (
    "context"
    "log/slog"
)

type loggerKeyType struct{}

var loggerKey = loggerKeyType{}

func LogWithContext(ctx context.Context, logger *slog.Logger) context.Context {
    if ctx == nil {
        ctx = context.Background()
    }
    return context.WithValue(ctx, loggerKey, logger)
}

func LoggerFromContext(ctx context.Context) *slog.Logger {
    logger, ok := ctx.Value(loggerKey).(*slog.Logger)
    if !ok {
        slog.Error("failed to retrieve logger from context")
        return slog.Default()
    }
    return logger
}

And I use it further like this:

// middleware

log = log.With("telegram_id", userTGID, "telegram_username", c.Sender().Username)
ctx = share.LogWithContext(ctx, log)

user, err := userRepo.FindByTelegramID(ctx, userTGID)

// repository

log := share.LoggerFromContext(ctx)

I’m not sure how applicable this is in real projects or what issues it might cause, but for now I’ll stick with this approach. Thanks, everyone.

Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Zakhar Delov