blob: fb250894a29565c769d83f39600821fdcfe43604 [file] [log] [blame]
Abhay Kumara61c5222025-11-10 07:32:50 +00001package bbolt
2
3// See https://github.com/etcd-io/raft/blob/main/logger.go
4import (
5 "fmt"
6 "io"
7 "log"
8 "os"
9)
10
11type Logger interface {
12 Debug(v ...interface{})
13 Debugf(format string, v ...interface{})
14
15 Error(v ...interface{})
16 Errorf(format string, v ...interface{})
17
18 Info(v ...interface{})
19 Infof(format string, v ...interface{})
20
21 Warning(v ...interface{})
22 Warningf(format string, v ...interface{})
23
24 Fatal(v ...interface{})
25 Fatalf(format string, v ...interface{})
26
27 Panic(v ...interface{})
28 Panicf(format string, v ...interface{})
29}
30
31func getDiscardLogger() Logger {
32 return discardLogger
33}
34
35var (
36 discardLogger = &DefaultLogger{Logger: log.New(io.Discard, "", 0)}
37)
38
39const (
40 calldepth = 2
41)
42
43// DefaultLogger is a default implementation of the Logger interface.
44type DefaultLogger struct {
45 *log.Logger
46 debug bool
47}
48
49func (l *DefaultLogger) EnableTimestamps() {
50 l.SetFlags(l.Flags() | log.Ldate | log.Ltime)
51}
52
53func (l *DefaultLogger) EnableDebug() {
54 l.debug = true
55}
56
57func (l *DefaultLogger) Debug(v ...interface{}) {
58 if l.debug {
59 _ = l.Output(calldepth, header("DEBUG", fmt.Sprint(v...)))
60 }
61}
62
63func (l *DefaultLogger) Debugf(format string, v ...interface{}) {
64 if l.debug {
65 _ = l.Output(calldepth, header("DEBUG", fmt.Sprintf(format, v...)))
66 }
67}
68
69func (l *DefaultLogger) Info(v ...interface{}) {
70 _ = l.Output(calldepth, header("INFO", fmt.Sprint(v...)))
71}
72
73func (l *DefaultLogger) Infof(format string, v ...interface{}) {
74 _ = l.Output(calldepth, header("INFO", fmt.Sprintf(format, v...)))
75}
76
77func (l *DefaultLogger) Error(v ...interface{}) {
78 _ = l.Output(calldepth, header("ERROR", fmt.Sprint(v...)))
79}
80
81func (l *DefaultLogger) Errorf(format string, v ...interface{}) {
82 _ = l.Output(calldepth, header("ERROR", fmt.Sprintf(format, v...)))
83}
84
85func (l *DefaultLogger) Warning(v ...interface{}) {
86 _ = l.Output(calldepth, header("WARN", fmt.Sprint(v...)))
87}
88
89func (l *DefaultLogger) Warningf(format string, v ...interface{}) {
90 _ = l.Output(calldepth, header("WARN", fmt.Sprintf(format, v...)))
91}
92
93func (l *DefaultLogger) Fatal(v ...interface{}) {
94 _ = l.Output(calldepth, header("FATAL", fmt.Sprint(v...)))
95 os.Exit(1)
96}
97
98func (l *DefaultLogger) Fatalf(format string, v ...interface{}) {
99 _ = l.Output(calldepth, header("FATAL", fmt.Sprintf(format, v...)))
100 os.Exit(1)
101}
102
103func (l *DefaultLogger) Panic(v ...interface{}) {
104 l.Logger.Panic(v...)
105}
106
107func (l *DefaultLogger) Panicf(format string, v ...interface{}) {
108 l.Logger.Panicf(format, v...)
109}
110
111func header(lvl, msg string) string {
112 return fmt.Sprintf("%s: %s", lvl, msg)
113}