-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcore.go
111 lines (92 loc) · 2.08 KB
/
core.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package inquisitor
import (
"fmt"
"io"
"log"
"os"
"strings"
)
const Inquisitor = "---INQUISITOR---"
var logger ILogger = &inquisitor{
stdLog: log.New(os.Stderr, Inquisitor, log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
level: LevelInfo,
calldepth: 4,
}
type inquisitor struct {
stdLog *log.Logger
level Level
calldepth int
}
func (i *inquisitor) log(lv Level, format *string, a ...any) {
if i.level > lv {
return
}
sb := &strings.Builder{}
switch lv {
case LevelTrace:
sb.WriteString("[TRACE] ")
case LevelDebug:
sb.WriteString("[DEBUG] ")
case LevelInfo:
sb.WriteString("[INFO] ")
case LevelWarn:
sb.WriteString("[WARN] ")
case LevelError:
sb.WriteString("[ERROR] ")
case LevelFatal:
sb.WriteString("[FATAL] ")
default:
sb.WriteString(fmt.Sprintf("[?%d?] ", lv))
}
if format != nil {
sb.WriteString(fmt.Sprintf(*format, a...))
} else {
sb.WriteString(fmt.Sprint(a...))
}
_ = i.stdLog.Output(i.calldepth, sb.String())
if lv == LevelFatal {
os.Exit(1)
}
}
func (i *inquisitor) SetLevel(lv Level) {
i.level = lv
}
func (i *inquisitor) SetOutput(w io.Writer) {
i.stdLog.SetOutput(w)
}
func (i *inquisitor) Trace(a ...any) {
i.log(LevelTrace, nil, a...)
}
func (i *inquisitor) Debug(a ...any) {
i.log(LevelDebug, nil, a...)
}
func (i *inquisitor) Info(a ...any) {
i.log(LevelInfo, nil, a...)
}
func (i *inquisitor) Warn(a ...any) {
i.log(LevelWarn, nil, a...)
}
func (i *inquisitor) Error(a ...any) {
i.log(LevelError, nil, a...)
}
func (i *inquisitor) Fatal(a ...any) {
i.log(LevelFatal, nil, a...)
}
func (i *inquisitor) Tracef(format string, a ...any) {
i.log(LevelTrace, &format, a...)
}
func (i *inquisitor) Debugf(format string, a ...any) {
i.log(LevelDebug, &format, a...)
}
func (i *inquisitor) Infof(format string, a ...any) {
i.log(LevelInfo, &format, a...)
}
func (i *inquisitor) Warnf(format string, a ...any) {
i.log(LevelWarn, &format, a...)
}
func (i *inquisitor) Errorf(format string, a ...any) {
i.log(LevelError, &format, a...)
}
func (i *inquisitor) Fatalf(format string, a ...any) {
i.log(LevelFatal, &format, a...)
}