diff --git a/pkg/services/authz/zanzana/logger.go b/pkg/services/authz/zanzana/logger.go new file mode 100644 index 00000000000..4f74c03284c --- /dev/null +++ b/pkg/services/authz/zanzana/logger.go @@ -0,0 +1,86 @@ +package zanzana + +import ( + "context" + + "go.uber.org/zap" + + "github.com/grafana/grafana/pkg/infra/log" +) + +// zanzanaLogger is a grafana logger wrapper compatible with OpenFGA logger interface +type zanzanaLogger struct { + logger *log.ConcreteLogger +} + +func newZanzanaLogger() *zanzanaLogger { + logger := log.New("openfga-server") + + return &zanzanaLogger{ + logger: logger, + } +} + +// Simple converter for zap logger fields +func zapFieldsToArgs(fields []zap.Field) []any { + args := make([]any, 0) + for _, f := range fields { + args = append(args, f.Key) + if f.Interface != nil { + args = append(args, f.Interface) + } else if f.String != "" { + args = append(args, f.String) + } else { + args = append(args, f.Integer) + } + } + return args +} + +func (l *zanzanaLogger) Debug(msg string, fields ...zap.Field) { + l.logger.Debug(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) Info(msg string, fields ...zap.Field) { + l.logger.Info(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) Warn(msg string, fields ...zap.Field) { + l.logger.Warn(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) Error(msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) Panic(msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) Fatal(msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) DebugWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Debug(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) InfoWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Info(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) WarnWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Warn(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) ErrorWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) PanicWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} + +func (l *zanzanaLogger) FatalWithContext(ctx context.Context, msg string, fields ...zap.Field) { + l.logger.Error(msg, zapFieldsToArgs(fields)...) +} diff --git a/pkg/services/authz/zanzana/server.go b/pkg/services/authz/zanzana/server.go index e00b2a22eb5..73c929252b4 100644 --- a/pkg/services/authz/zanzana/server.go +++ b/pkg/services/authz/zanzana/server.go @@ -1,7 +1,6 @@ package zanzana import ( - "github.com/openfga/openfga/pkg/logger" "github.com/openfga/openfga/pkg/server" "github.com/openfga/openfga/pkg/storage" ) @@ -10,8 +9,7 @@ func NewServer(store storage.OpenFGADatastore) (*server.Server, error) { // FIXME(kalleep): add support for more options, configure logging, tracing etc opts := []server.OpenFGAServiceV1Option{ server.WithDatastore(store), - // FIXME(kalleep): Write and log adapter for open fga logging interface - server.WithLogger(logger.NewNoopLogger()), + server.WithLogger(newZanzanaLogger()), } // FIXME(kalleep): Interceptors