framework_v2/internal/middleware/grpc/log.go

46 lines
1003 B
Go
Raw Normal View History

2024-06-15 16:55:25 +00:00
package grpc
2024-06-13 01:16:48 +00:00
import (
"context"
"fmt"
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
"go.uber.org/zap"
)
func ZapLogInterceptor() logging.Logger {
return logging.LoggerFunc(func(ctx context.Context, lvl logging.Level, msg string, fields ...any) {
f := make([]zap.Field, 0, len(fields)/2)
for i := 0; i < len(fields); i += 2 {
key := fields[i]
value := fields[i+1]
switch v := value.(type) {
case string:
f = append(f, zap.String(key.(string), v))
case int:
f = append(f, zap.Int(key.(string), v))
case bool:
f = append(f, zap.Bool(key.(string), v))
default:
f = append(f, zap.Any(key.(string), v))
}
}
2024-07-14 09:44:49 +00:00
log := logger.WithOptions(zap.AddCallerSkip(1)).With(f...)
2024-06-13 01:16:48 +00:00
switch lvl {
case logging.LevelDebug:
2024-06-15 16:55:25 +00:00
log.Debug(msg)
2024-06-13 01:16:48 +00:00
case logging.LevelInfo:
2024-06-15 16:55:25 +00:00
log.Info(msg)
2024-06-13 01:16:48 +00:00
case logging.LevelWarn:
2024-06-15 16:55:25 +00:00
log.Warn(msg)
2024-06-13 01:16:48 +00:00
case logging.LevelError:
2024-06-15 16:55:25 +00:00
log.Error(msg)
2024-06-13 01:16:48 +00:00
default:
panic(fmt.Sprintf("unknown level %v", lvl))
}
})
}