-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.go
106 lines (89 loc) · 2.26 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
package logger
import (
"context"
"log/slog"
"os"
"strings"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
var log *slog.Logger
const request_id = "request_id"
type Logger interface {
Debug(log string, args ...any)
DebugWithCtx(ctx context.Context, logMsg string, args ...any)
Info(log string, args ...any)
InfoWithCtx(ctx context.Context, logMsg string, args ...any)
Error(log string, args ...any)
ErrorWithCtx(ctx context.Context, logMsg string, args ...any)
Warn(log string, args ...any)
WarnWithCtx(ctx context.Context, logMsg string, args ...any)
AttachRequestIdToRequests(c *gin.Context)
}
type Impl struct {
}
/*
Debug log
*/
func Debug(logMsg string, args ...any) {
log.Debug(logMsg, args...)
}
func DebugWithCtx(ctx context.Context, logMsg string, args ...any) {
args = append(args, request_id, ctx.Value(request_id))
log.DebugContext(ctx, logMsg, args...)
}
/*
Info log
*/
func Info(logMsg string, args ...any) {
log.Info(logMsg, args...)
}
func InfoWithCtx(ctx context.Context, logMsg string, args ...any) {
args = append(args, request_id, ctx.Value(request_id))
log.InfoContext(ctx, logMsg, args...)
}
/*
Warn log
*/
func Warn(logMsg string, args ...any) {
log.Warn(logMsg, args...)
}
func WarnWithCtx(ctx context.Context, logMsg string, args ...any) {
args = append(args, request_id, ctx.Value(request_id))
log.WarnContext(ctx, logMsg, args...)
}
/*
Error log
*/
func Error(logMsg string, args ...any) {
log.Error(logMsg, args...)
}
func ErrorWithCtx(ctx context.Context, logMsg string, args ...any) {
args = append(args, request_id, ctx.Value(request_id))
log.ErrorContext(ctx, logMsg, args...)
}
func AttachRequestIdToRequests(c *gin.Context) {
u := uuid.New()
c.Set(request_id, u)
DebugWithCtx(c, "request started", "method", c.Request.Method, "path", c.Request.URL.Path)
c.Next()
}
func Init(logLevel string) {
handlerOptions := slog.HandlerOptions{Level: getLogLevel(logLevel)}
log = slog.New(slog.NewJSONHandler(os.Stdout, &handlerOptions))
slog.SetDefault(log)
}
func getLogLevel(level string) slog.Level {
switch strings.ToLower(level) {
case "debug":
return slog.LevelDebug
case "info":
return slog.LevelInfo
case "warn":
return slog.LevelWarn
case "error":
return slog.LevelError
default:
return slog.LevelInfo
}
}