Skip to content

Commit eb6cb05

Browse files
committed
logger refactor and initial logging method
1 parent 1cfdd0d commit eb6cb05

File tree

3 files changed

+46
-16
lines changed

3 files changed

+46
-16
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/coder/coder/v2/coderd/database"
2626
"github.com/coder/coder/v2/coderd/database/dbtime"
2727
"github.com/coder/coder/v2/coderd/httpapi/httpapiconstraints"
28+
loggermw "github.com/coder/coder/v2/coderd/httpmw/logger"
2829
"github.com/coder/coder/v2/coderd/rbac"
2930
"github.com/coder/coder/v2/coderd/util/slice"
3031
"github.com/coder/coder/v2/provisionersdk"
@@ -462,12 +463,9 @@ func As(ctx context.Context, actor rbac.Subject) context.Context {
462463
}
463464

464465
func InjectActorToContext(ctx context.Context, actor rbac.Subject) context.Context {
465-
// if rlogger := httpmw.RequestLoggerFromContext(ctx); rlogger != nil {
466-
// rlogger.WithFields(
467-
// slog.F("requestor_id", actor.ID),
468-
// slog.F("requestor_email", actor.Email),
469-
// )
470-
// }
466+
if rlogger := loggermw.RequestLoggerFromContext(ctx); rlogger != nil {
467+
rlogger.WithAuthContext(actor.ID, actor.FriendlyName, actor.Email)
468+
}
471469
return context.WithValue(ctx, authContextKey{}, actor)
472470
}
473471

coderd/httpmw/logger/logger.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,30 +62,50 @@ func Logger(log slog.Logger) func(next http.Handler) http.Handler {
6262
type RequestLogger interface {
6363
WithFields(fields ...slog.Field)
6464
WriteLog(ctx context.Context, status int)
65+
WithAuthContext(id string, name string, email string)
6566
}
6667

6768
type SlogRequestLogger struct {
68-
log slog.Logger
69-
written bool
70-
message string
71-
start time.Time
69+
log slog.Logger
70+
written bool
71+
message string
72+
authCtxPresent bool
73+
start time.Time
7274
}
7375

7476
var _ RequestLogger = &SlogRequestLogger{}
7577

7678
func NewRequestLogger(log slog.Logger, message string, start time.Time) RequestLogger {
7779
return &SlogRequestLogger{
78-
log: log,
79-
written: false,
80-
message: message,
81-
start: start,
80+
log: log,
81+
written: false,
82+
message: message,
83+
start: start,
84+
authCtxPresent: false,
8285
}
8386
}
8487

8588
func (c *SlogRequestLogger) WithFields(fields ...slog.Field) {
8689
c.log = c.log.With(fields...)
8790
}
8891

92+
func (c *SlogRequestLogger) WithAuthContext(id string, name string, email string) {
93+
// If the email is empty, we don't want to log the requestor context,
94+
// because it's an elevated privilege.
95+
if email == "" || id == "" {
96+
return
97+
}
98+
if c.authCtxPresent {
99+
return
100+
}
101+
c.authCtxPresent = true
102+
c.log = c.log.With(
103+
slog.F("requestor_id", id),
104+
slog.F("requestor_name", name),
105+
slog.F("requestor_email", email),
106+
)
107+
}
108+
89109
func (c *SlogRequestLogger) WriteLog(ctx context.Context, status int) {
90110
if c.written {
91111
return

coderd/httpmw/logger/loggermock/loggermock.go

Lines changed: 14 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)