2025-04-01 10:38:02 +09:00

97 lines
2.6 KiB
Go

package logger
import (
"context"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/openfga/openfga/pkg/logger"
)
var _ logger.Logger = (*ZanzanaLogger)(nil)
// ZanzanaLogger is a grafana logger wrapper compatible with OpenFGA logger interface
type ZanzanaLogger struct {
logger log.Logger
}
func New(logger log.Logger) *ZanzanaLogger {
return &ZanzanaLogger{
logger: logger,
}
}
// Simple converter for zap logger fields
func zapFieldsToArgs(fields []zap.Field) []any {
// We need to pre-allocated space for key and value
args := make([]any, 0, len(fields)*2)
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
}
// With implements logger.Logger.
func (l *ZanzanaLogger) With(fields ...zapcore.Field) logger.Logger {
return &ZanzanaLogger{
logger: l.logger.New(zapFieldsToArgs(fields)...),
}
}
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)...)
}