-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathslogger.go
More file actions
103 lines (86 loc) · 3.35 KB
/
Copy pathslogger.go
File metadata and controls
103 lines (86 loc) · 3.35 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
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
//go:build slogger
// +build slogger
package common
import (
"context"
"log/slog"
"os"
)
var selfLogger *slog.Logger
type LogField = any
func InitLogger() *slog.Logger {
if selfLogger == nil {
selfLogger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
}
return selfLogger
}
func addCommonFields(context context.Context, fields []any) []any {
var trace_id = context.Value(TraceIdNameInContext)
if trace_id != nil {
fields = append(fields, String(TraceId, trace_id.(string)))
}
// , String(HTTPURL, context.Value(HttpUrl{}).(string)))
var url = context.Value(HttpUrl{})
if url != nil {
fields = append(fields, String(HTTPURL, url.(string)))
}
var clientInfo = context.Value(ClientInfo{})
if clientInfo != nil {
fields = append(fields, String(CLIENTINFO, clientInfo.(string)))
}
var sid = context.Value(SidNameInContext)
if sid != nil {
fields = append(fields, String(SID, sid.(string)))
}
return fields
}
func Info(context context.Context, msg string, fields ...any) {
// 程序启动过程中,如gorm链接数据库失败,此时没有trace_id;
// 其他情况下,如gorm可能忘记了withContext,也会出现没有trace_id的情况,但这是不可以接受的,应该修复,此处这么写,只是为了不影响程序运行
fields = addCommonFields(context, fields)
selfLogger.Info(msg, fields...)
}
func Warn(context context.Context, msg string, fields ...any) {
// 程序启动过程中,如gorm链接数据库失败,此时没有trace_id;
// 其他情况下,如gorm可能忘记了withContext,也会出现没有trace_id的情况,但这是不可以接受的,应该修复,此处这么写,只是为了不影响程序运行
fields = addCommonFields(context, fields)
selfLogger.Warn(msg, fields...)
}
func Error(context context.Context, msg string, fields ...any) {
// 程序启动过程中,如gorm链接数据库失败,此时没有trace_id;
// 其他情况下,如gorm可能忘记了withContext,也会出现没有trace_id的情况,但这是不可以接受的,应该修复,此处这么写,只是为了不影响程序运行
fields = addCommonFields(context, fields)
selfLogger.Error(msg, fields...)
}
func Debug(context context.Context, msg string, fields ...any) {
// 程序启动过程中,如gorm链接数据库失败,此时没有trace_id;
// 其他情况下,如gorm可能忘记了withContext,也会出现没有trace_id的情况,但这是不可以接受的,应该修复,此处这么写,只是为了不影响程序运行
fields = addCommonFields(context, fields)
selfLogger.Debug(msg, fields...)
}
// warpper for slog.String,主要是屏蔽zap包
// 而且这样写,代码编译时会inline,并不影响性能
func String(key, val string) LogField {
return slog.String(key, val)
}
func Int64(key string, val int64) LogField {
return slog.Int64(key, val)
}
func Int(key string, val int) LogField {
return slog.Int(key, val)
}
// Any
func Any(key string, val any) LogField {
return slog.Any(key, val)
}
func Err(err error) LogField {
return slog.String("error", err.Error())
}
func Float64(key string, val float64) LogField {
return slog.Float64(key, val)
}
// 本函数存在的目的是让外界的模块不需要看见LogField的定义,如代码可以写为:
// var fiedls = InitFields( String("key", "value"), Int("key2",10));
func InitFields(fileds ...any) []any {
return fileds
}