internal/gitaly/storage/raftmgr/raft_logger.go (61 lines of code) (raw):
package raftmgr
import (
"fmt"
"strings"
"gitlab.com/gitlab-org/gitaly/v16/internal/log"
)
// raftLogger is a wrapper around the log.Logger interface to
// implement etcd/raft's logger interface methods.
type raftLogger struct {
logger log.Logger
}
// Debug logs a debug level message using variable arguments.
func (l *raftLogger) Debug(args ...any) {
l.Debugf(l.generateFormatString(len(args)), args...)
}
// Debugf logs a formatted debug level message.
func (l *raftLogger) Debugf(format string, args ...any) {
l.logger.Debug(fmt.Sprintf(format, args...))
}
// Info logs an info level message using variable arguments.
func (l *raftLogger) Info(args ...any) {
l.Infof(l.generateFormatString(len(args)), args...)
}
// Infof logs a formatted info level message.
func (l *raftLogger) Infof(format string, args ...any) {
l.logger.Info(fmt.Sprintf(format, args...))
}
// Warning logs a warning level message using variable arguments.
func (l *raftLogger) Warning(args ...any) {
l.Warningf(l.generateFormatString(len(args)), args...)
}
// Warningf logs a formatted warning level message.
func (l *raftLogger) Warningf(format string, args ...any) {
l.logger.Warn(fmt.Sprintf(format, args...))
}
// Error logs an error level message using variable arguments.
func (l *raftLogger) Error(args ...any) {
l.Errorf(l.generateFormatString(len(args)), args...)
}
// Errorf logs a formatted error level message.
func (l *raftLogger) Errorf(format string, args ...any) {
l.logger.Error(fmt.Sprintf(format, args...))
}
// Fatal logs a fatal level message using variable arguments.
func (l *raftLogger) Fatal(args ...any) {
l.Fatalf(l.generateFormatString(len(args)), args...)
}
// Fatalf logs a formatted fatal level message using error level log.
func (l *raftLogger) Fatalf(format string, args ...any) {
l.logger.Error(fmt.Sprintf(format, args...))
}
// Panic logs a panic level message using variable arguments.
func (l *raftLogger) Panic(args ...any) {
l.Panicf(l.generateFormatString(len(args)), args...)
}
// Panicf logs a formatted panic level message.
func (l *raftLogger) Panicf(format string, args ...any) {
msg := fmt.Sprintf(format, args...)
l.logger.Error(msg)
panic(msg)
}
// generateFormatString generates a format string for the provided number of arguments.
func (l *raftLogger) generateFormatString(argCount int) string {
switch argCount {
case 0:
return ""
case 1:
// Fast path, most common use cases.
return "%s"
default:
formatSpecifiers := make([]string, argCount)
for i := 0; i < argCount; i++ {
formatSpecifiers[i] = "%s"
}
return strings.Join(formatSpecifiers, " ")
}
}