-
Notifications
You must be signed in to change notification settings - Fork 1
/
logger.go
130 lines (109 loc) · 3.4 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package middleware
import (
"fmt"
"runtime"
"strings"
"time"
"github.com/Nigel2392/router/v3"
"github.com/Nigel2392/router/v3/request"
)
func AddLogger(next router.Handler) router.Handler {
return router.HandleFunc(func(r *request.Request) {
r.Logger = &logger{request: r}
next.ServeHTTP(r)
})
}
type logger struct {
request *request.Request
}
var (
critMsg = "\u001B[31;1;4mCRITICAL\u001B[0m"
errMsg = " \u001B[31;4mERROR\u001B[0m"
warnMsg = " \u001B[33;4mWARNING\u001B[0m"
infoMsg = " \u001B[34;4mINFO\u001B[0m"
dbugMsg = " \u001B[32;1;4mDEBUG\u001B[0m"
testMsg = " \u001B[35;1;4mTEST\u001B[0m"
writeMSG = " \u001B[90;4mWRITE\u001B[0m"
)
// Log a critical message.
func (l *logger) Critical(err error) {
_, file, line, _ := runtime.Caller(1)
fmt.Printf("[ \u001B[90;4m%s - \u001B[90m%s\u001B[0m %s ] %s on line %d \u001B[90m%s\u001B[0m\n",
padString(l.request.Method()+"\u001B[0m", 11),
time.Now().Format("2006-01-02 15:04:05"),
critMsg,
err.Error(),
line,
file)
}
// Error logs an error message.
func (l *logger) Error(args ...any) {
logPrintln(l.request, errMsg, args...)
}
// Warning logs a warning message.
func (l *logger) Warning(args ...any) {
logPrintln(l.request, warnMsg, args...)
}
// Info logs an info message.
func (l *logger) Info(args ...any) {
logPrintln(l.request, infoMsg, args...)
}
// Debug logs a debug message.
func (l *logger) Debug(args ...any) {
logPrintln(l.request, dbugMsg, args...)
}
// Test logs a test message.
func (l *logger) Test(args ...any) {
logPrintln(l.request, testMsg, args...)
}
// Error logs an error message.
func (l *logger) Errorf(format string, args ...any) {
logPrintf(l.request, errMsg, format, args...)
}
// Warning logs a warning message.
func (l *logger) Warningf(format string, args ...any) {
logPrintf(l.request, warnMsg, format, args...)
}
// Info logs an info message.
func (l *logger) Infof(format string, args ...any) {
logPrintf(l.request, infoMsg, format, args...)
}
// Debug logs a debug message.
func (l *logger) Debugf(format string, args ...any) {
logPrintf(l.request, dbugMsg, format, args...)
}
// Test logs a test message.
func (l *logger) Testf(format string, args ...any) {
logPrintf(l.request, testMsg, format, args...)
}
// Write a message to the console.
func (l *logger) Write(p []byte) (n int, err error) {
fmt.Print(logFormat(l.request, writeMSG, string(p)))
return len(p), nil
}
// Format a message and print it to the console.
func logPrintf(r *request.Request, levelMessage, format string, args ...any) {
fmt.Println(logFormat(r, levelMessage, fmt.Sprintf(format, args...)))
}
// Format a message and print it to the console.
func logPrintln(r *request.Request, levelMessage string, args ...any) {
fmt.Print(logFormat(r, levelMessage, fmt.Sprintln(args...)))
}
// Format a message and return it.
func logFormat(r *request.Request, levelMessage, additional string) string {
return fmt.Sprintf("[ \u001B[90;4m%s - \u001B[90m%s\u001B[0m %s ] \u001B[90m%s\u001B[0m %s",
padString(r.Method()+"\u001B[0m", 11),
time.Now().Format("2006-01-02 15:04:05"),
levelMessage,
r.Request.URL.Path,
additional)
}
func padString(s string, length int) string {
var b strings.Builder
b.Grow(length)
b.WriteString(s)
for i := len(s); i < length; i++ {
b.WriteRune(' ')
}
return b.String()
}