-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.go
More file actions
59 lines (50 loc) · 1.36 KB
/
logger.go
File metadata and controls
59 lines (50 loc) · 1.36 KB
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
package samhook
import (
"io"
"log"
"time"
)
// Logger 定義日誌記錄介面
type Logger interface {
LogRequest(url string, method string, duration time.Duration, err error)
}
// defaultLogger 預設的日誌記錄器實現
type defaultLogger struct {
logger *log.Logger
}
// LogRequest 記錄請求資訊
func (l *defaultLogger) LogRequest(url string, method string, duration time.Duration, err error) {
status := "success"
if err != nil {
status = "error"
}
l.logger.Printf("[samhook] %s %s - %s - duration: %v", method, url, status, duration)
if err != nil {
l.logger.Printf("[samhook] error: %v", err)
}
}
// noOpLogger 空操作日誌記錄器(不記錄任何內容)
type noOpLogger struct{}
func (l *noOpLogger) LogRequest(url string, method string, duration time.Duration, err error) {
// 不執行任何操作
}
// 包級別的日誌記錄器(可選功能,用於簡單的日誌記錄)
var defaultPackageLogger Logger = &noOpLogger{}
// SetLogger 設置包級別的日誌記錄器
func SetLogger(logger Logger) {
if logger == nil {
defaultPackageLogger = &noOpLogger{}
} else {
defaultPackageLogger = logger
}
}
// SetLoggerWriter 使用 io.Writer 設置包級別的日誌記錄器
func SetLoggerWriter(w io.Writer) {
if w == nil {
SetLogger(nil)
return
}
SetLogger(&defaultLogger{
logger: log.New(w, "", log.LstdFlags),
})
}