package badger import ( "context" "fmt" "strings" badger "github.com/dgraph-io/badger/v4" "github.com/rs/zerolog" ) type zerologAdapter struct { log zerolog.Logger } func (za zerologAdapter) Debugf(format string, args ...any) { za.fmt(za.log.Debug(), format, args...) } func (za zerologAdapter) Infof(format string, args ...any) { za.fmt(za.log.Info(), format, args...) } func (za zerologAdapter) Warningf(format string, args ...any) { za.fmt(za.log.Warn(), format, args...) } func (za zerologAdapter) Errorf(format string, args ...any) { za.fmt(za.log.Error(), format, args...) } func (za zerologAdapter) fmt(event *zerolog.Event, format string, args ...any) { event.Msgf(strings.TrimSuffix(format, "\n"), args...) } func Open(ctx context.Context, path string, log zerolog.Logger) (*badger.DB, error) { bl := zerologAdapter{ log: log.With().Str("db", "badger").Logger(), } opts := badger.DefaultOptions(path). WithLogger(bl). WithLoggingLevel(badger.INFO). WithValueLogFileSize(4 << 20). WithDir(path). WithValueDir(path) // WithMaxLevels(4). // WithMemTableSize(8 << 20). // WithMetricsEnabled(true). // WithCompactL0OnClose(true). // WithBlockCacheSize(8 << 20) db, err := badger.Open(opts) if err != nil { return nil, fmt.Errorf("opening badger: %w", err) } return db, nil }