-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.go
100 lines (80 loc) · 1.94 KB
/
logger.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
/*******************************************************************************
* Logger
*
* @author Lars Thoms <[email protected]>
* @date 2022-12-21
******************************************************************************/
package main
import (
"fmt"
"log"
"os"
)
const (
Debug = 0 + iota
Info
Warn
Fatal
)
type Logger struct {
level int
loggerList [4]*log.Logger
}
func (l *Logger) Level() int {
return l.level
}
func (l *Logger) SetLevel(level int) {
l.level = level
}
func NewLogger() *Logger {
return &Logger{
level: Debug,
loggerList: [4]*log.Logger{
log.New(os.Stdout, "[\u001B[0;37mDEBUG\u001B[0m] ", log.Ldate|log.Ltime|log.Lshortfile),
log.New(os.Stdout, "[\u001B[0;32mINFO\u001B[0m] ", log.Ldate|log.Ltime|log.Lshortfile),
log.New(os.Stderr, "[\u001B[0;33mWARNING\u001B[0m] ", log.Ldate|log.Ltime|log.Lshortfile),
log.New(os.Stderr, "[\u001B[0;31mFATAL\u001B[0m] ", log.Ldate|log.Ltime|log.Lshortfile),
},
}
}
func (l *Logger) logWithLevel(level int, format *string, v ...any) {
if l.level > level {
return
}
var err error
if format == nil {
err = l.loggerList[level].Output(3, fmt.Sprint(v...))
} else {
err = l.loggerList[level].Output(3, fmt.Sprintf(*format, v...))
}
if err != nil {
fmt.Println(err)
}
if level == Fatal {
os.Exit(1)
}
}
func (l *Logger) Debug(v ...any) {
l.logWithLevel(Debug, nil, v...)
}
func (l *Logger) Debugf(format string, v ...any) {
l.logWithLevel(Debug, &format, v...)
}
func (l *Logger) Info(v ...any) {
l.logWithLevel(Info, nil, v...)
}
func (l *Logger) Infof(format string, v ...any) {
l.logWithLevel(Info, &format, v...)
}
func (l *Logger) Warn(v ...any) {
l.logWithLevel(Warn, nil, v...)
}
func (l *Logger) Warnf(format string, v ...any) {
l.logWithLevel(Warn, &format, v...)
}
func (l *Logger) Fatal(v ...any) {
l.logWithLevel(Fatal, nil, v...)
}
func (l *Logger) Fatalf(format string, v ...any) {
l.logWithLevel(Fatal, &format, v...)
}