grpc/common/autologger/autologger.go (31 lines of code) (raw):

package autologger // This package is one implementation to control what to be logged for each API automatically. // It provides customization function to go-grpc-middleware logging interceptor. import ( "context" "fmt" log "log/slog" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging" ) func InterceptorLogger(logger *log.Logger) logging.Logger { return logging.LoggerFunc(func(ctx context.Context, lvl logging.Level, msg string, fields ...any) { // fmt.Println("ctx: ", ctx) // fmt.Printf("fields: %v\n", fields) f := make(map[string]any, len(fields)/2) l := logger i := logging.Fields(fields).Iterator() for i.Next() { k, v := i.At() f[k] = v l = l.With(k, v) // fmt.Printf("k %v, v %v\n", k, v) } // fmt.Println(lvl, msg) // l.Info("blah") switch lvl { case logging.LevelDebug: l.Debug(msg) case logging.LevelInfo: l.Info(msg) case logging.LevelWarn: l.Warn(msg) case logging.LevelError: l.Error(msg) default: panic(fmt.Sprintf("unknown level %v", lvl)) } }) }