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