-
Notifications
You must be signed in to change notification settings - Fork 0
/
logging.go
104 lines (87 loc) · 2.35 KB
/
logging.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
package repository
import (
"context"
"time"
"github.com/gopad/gopad-api/pkg/model"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
// LoggingRequestID returns the request ID as string for logging
type LoggingRequestID func(context.Context) string
// LoggingRepository implements MembersRepository interface.
type LoggingRepository struct {
upstream MembersRepository
requestID LoggingRequestID
logger zerolog.Logger
}
// NewLoggingRepository wraps the MembersRepository and provides logging for its methods.
func NewLoggingRepository(repository MembersRepository, requestID LoggingRequestID) MembersRepository {
return &LoggingRepository{
upstream: repository,
requestID: requestID,
logger: log.With().Str("service", "members").Logger(),
}
}
// List implements the MembersRepository interface.
func (r *LoggingRepository) List(ctx context.Context, teamID, userID string) ([]*model.Member, error) {
start := time.Now()
records, err := r.upstream.List(ctx, teamID, userID)
logger := r.logger.With().
Str("request", r.requestID(ctx)).
Str("method", "list").
Dur("duration", time.Since(start)).
Str("team", teamID).
Str("user", userID).
Logger()
if err != nil {
logger.Warn().
Err(err).
Msg("failed to fetch members")
} else {
logger.Debug().
Msg("")
}
return records, err
}
// Append implements the MembersRepository interface.
func (r *LoggingRepository) Append(ctx context.Context, teamID, userID string) error {
start := time.Now()
err := r.upstream.Append(ctx, teamID, userID)
logger := r.logger.With().
Str("request", r.requestID(ctx)).
Str("method", "append").
Dur("duration", time.Since(start)).
Str("team", teamID).
Str("user", userID).
Logger()
if err != nil {
logger.Warn().
Err(err).
Msg("failed to append member")
} else {
logger.Debug().
Msg("")
}
return err
}
// Drop implements the MembersRepository interface.
func (r *LoggingRepository) Drop(ctx context.Context, teamID, userID string) error {
start := time.Now()
err := r.upstream.Drop(ctx, teamID, userID)
logger := r.logger.With().
Str("request", r.requestID(ctx)).
Str("method", "drop").
Dur("duration", time.Since(start)).
Str("team", teamID).
Str("user", userID).
Logger()
if err != nil {
logger.Warn().
Err(err).
Msg("failed to drop member")
} else {
logger.Debug().
Msg("")
}
return err
}