logger.go raw
1 //go:build !(js && wasm)
2
3 package database
4
5 import (
6 "fmt"
7 "runtime"
8 "strings"
9
10 "go.uber.org/atomic"
11 "next.orly.dev/pkg/lol"
12 "next.orly.dev/pkg/lol/log"
13 )
14
15 // NewLogger creates a new badger logger.
16 func NewLogger(logLevel int, label string) (l *logger) {
17 l = &logger{Label: label}
18 l.Level.Store(int32(logLevel))
19 return
20 }
21
22 type logger struct {
23 Level atomic.Int32
24 Label string
25 }
26
27 // SetLogLevel atomically adjusts the log level to the given log level code.
28 func (l *logger) SetLogLevel(level int) {
29 l.Level.Store(int32(level))
30 }
31
32 // Errorf is a log printer for this level of message.
33 func (l *logger) Errorf(s string, i ...interface{}) {
34 if l.Level.Load() >= lol.Error {
35 s = l.Label + ": " + s
36 txt := fmt.Sprintf(s, i...)
37 _, file, line, _ := runtime.Caller(2)
38 log.E.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
39 }
40 }
41
42 // Warningf is a log printer for this level of message.
43 func (l *logger) Warningf(s string, i ...interface{}) {
44 if l.Level.Load() >= lol.Warn {
45 s = l.Label + ": " + s
46 txt := fmt.Sprintf(s, i...)
47 _, file, line, _ := runtime.Caller(2)
48 log.W.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
49 }
50 }
51
52 // Infof is a log printer for this level of message.
53 func (l *logger) Infof(s string, i ...interface{}) {
54 if l.Level.Load() >= lol.Info {
55 s = l.Label + ": " + s
56 txt := fmt.Sprintf(s, i...)
57 _, file, line, _ := runtime.Caller(2)
58 log.I.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
59 }
60 }
61
62 // Debugf is a log printer for this level of message.
63 func (l *logger) Debugf(s string, i ...interface{}) {
64 if l.Level.Load() >= lol.Debug {
65 s = l.Label + ": " + s
66 txt := fmt.Sprintf(s, i...)
67 _, file, line, _ := runtime.Caller(2)
68 log.D.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
69 }
70 }
71