mirror of
https://github.com/hanzokv/go.git
synced 2026-09-24 00:31:51 +00:00
We do not use Redis. The client was a go-redis fork and still said so
everywhere: `package redis`, `redis.NewClient`, `redis://`, `extra/redisotel`.
Consumers wrote `redis.Client` against a Valkey-backed store called KV.
package redis -> package kv (93 decls)
redis.X -> kv.X (2,794 call sites)
"redis: …" errors -> "kv: …" (206)
extra/redis{otel,cmd,prometheus,census} -> extra/kv{otel,cmd,prometheus,census}
redis:// , rediss:// -> kv:// , kvs:// (ParseURL)
Redis*/*Redis* idents -> KV*/*KV*
REDIS_VERSION, REDIS_ENDPOINTS_CONFIG_PATH -> KV_*
I previously argued this rename was unsafe because much of it was "wire
contract". That was wrong, and the categorisation shows why: RESP command names
are GET/SET/HSET — they never contain the word. Of 5,771 occurrences only two
kinds were server-visible at all: the ParseURL scheme (we choose what we pass;
our configs already use kv://) and the CLIENT SETINFO lib-name label, which the
server merely records. Nothing here changes a byte of protocol.
Two things deliberately keep the old spelling:
RediSearch — names a specific external module the FT.* commands map to.
StoreDist — contains the letters by accident (sto-reDis-t), not the word.
Breaking for consumers by design: every import site must move redis.X -> kv.X.
Minor bump, never a major — this module stays v9 forever.
80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
// TODO (ned): Revisit logging
|
|
// Add more standardized approach with log levels and configurability
|
|
|
|
type Logging interface {
|
|
Printf(ctx context.Context, format string, v ...interface{})
|
|
}
|
|
|
|
type DefaultLogger struct {
|
|
log *log.Logger
|
|
}
|
|
|
|
func (l *DefaultLogger) Printf(ctx context.Context, format string, v ...interface{}) {
|
|
_ = l.log.Output(2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func NewDefaultLogger() Logging {
|
|
return &DefaultLogger{
|
|
log: log.New(os.Stderr, "kv: ", log.LstdFlags|log.Lshortfile),
|
|
}
|
|
}
|
|
|
|
// Logger calls Output to print to the stderr.
|
|
// Arguments are handled in the manner of fmt.Print.
|
|
var Logger Logging = NewDefaultLogger()
|
|
|
|
var LogLevel LogLevelT = LogLevelError
|
|
|
|
// LogLevelT represents the logging level
|
|
type LogLevelT int
|
|
|
|
// Log level constants for the entire go-kv library
|
|
const (
|
|
LogLevelError LogLevelT = iota // 0 - errors only
|
|
LogLevelWarn // 1 - warnings and errors
|
|
LogLevelInfo // 2 - info, warnings, and errors
|
|
LogLevelDebug // 3 - debug, info, warnings, and errors
|
|
)
|
|
|
|
// String returns the string representation of the log level
|
|
func (l LogLevelT) String() string {
|
|
switch l {
|
|
case LogLevelError:
|
|
return "ERROR"
|
|
case LogLevelWarn:
|
|
return "WARN"
|
|
case LogLevelInfo:
|
|
return "INFO"
|
|
case LogLevelDebug:
|
|
return "DEBUG"
|
|
default:
|
|
return "UNKNOWN"
|
|
}
|
|
}
|
|
|
|
// IsValid returns true if the log level is valid
|
|
func (l LogLevelT) IsValid() bool {
|
|
return l >= LogLevelError && l <= LogLevelDebug
|
|
}
|
|
|
|
func (l LogLevelT) WarnOrAbove() bool {
|
|
return l >= LogLevelWarn
|
|
}
|
|
|
|
func (l LogLevelT) InfoOrAbove() bool {
|
|
return l >= LogLevelInfo
|
|
}
|
|
|
|
func (l LogLevelT) DebugOrAbove() bool {
|
|
return l >= LogLevelDebug
|
|
}
|