This repository has been archived by the owner on Feb 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.go
82 lines (62 loc) · 1.85 KB
/
log.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
package log
import (
"context"
"errors"
"io"
"github.com/rs/zerolog/hlog"
"github.com/rs/zerolog"
)
type Logger interface {
Info(ctx context.Context, msg string, params ...param)
Debug(ctx context.Context, msg string, params ...param)
Warn(ctx context.Context, msg string, params ...param)
Err(ctx context.Context, msg string, err error, params ...param)
Fatal(ctx context.Context, msg string, err error, params ...param)
}
type logger struct {
Log zerolog.Logger
}
func New(writer io.Writer, isJSON bool) logger {
const timeFormat = "02 Jan 2006 15:04:05"
if !isJSON {
writer = zerolog.ConsoleWriter{Out: writer, TimeFormat: timeFormat}
}
return logger{
Log: zerolog.New(writer).With().Timestamp().Logger(),
}
}
type param struct {
Key string
Value any
}
func P(key string, value any) param {
return param{key, value}
}
func leveledEvent(ctx context.Context, evt *zerolog.Event, msg string, params ...param) *zerolog.Event {
evt = evt.Caller(2)
for _, p := range params {
evt.Interface(p.Key, p.Value)
}
if logID, ok := hlog.IDFromCtx(ctx); ok {
evt.Stringer("request_id", logID)
}
return evt
}
func (l logger) Info(ctx context.Context, msg string, params ...param) {
leveledEvent(ctx, l.Log.Info(), msg, params...).Msg(msg)
}
func (l logger) Debug(ctx context.Context, msg string, params ...param) {
leveledEvent(ctx, l.Log.Debug(), msg, params...).Msg(msg)
}
func (l logger) Warn(ctx context.Context, msg string, params ...param) {
leveledEvent(ctx, l.Log.Warn(), msg, params...).Msg(msg)
}
func (l logger) Err(ctx context.Context, msg string, err error, params ...param) {
if err == nil {
err = errors.New("nil")
}
leveledEvent(ctx, l.Log.Err(err), msg, params...).Msg(msg)
}
func (l logger) Fatal(ctx context.Context, msg string, err error, params ...param) {
leveledEvent(ctx, l.Log.Fatal(), msg, params...).Err(err).Msg(msg)
}