-
Notifications
You must be signed in to change notification settings - Fork 3
/
agentlogger.go
52 lines (44 loc) · 1.37 KB
/
agentlogger.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
// Copyright 2023 Adevinta
package engine
import (
"context"
"fmt"
"log/slog"
"runtime"
"time"
)
// agentLogger wraps [slog] to implement
// [github.com/adevinta/vulcan-agent/log.Logger].
type agentLogger struct {
logger *slog.Logger
}
// newAgentLogger creates a new [agentLogger].
func newAgentLogger(l *slog.Logger) agentLogger {
return agentLogger{logger: l}
}
// Debugf formats according to a format specifier and logs at
// [slog.LevelDebug].
func (l agentLogger) Debugf(format string, args ...any) {
l.log(slog.LevelDebug, format, args...)
}
// Infof formats according to a format specifier and logs at
// [slog.LevelInfo].
func (l agentLogger) Infof(format string, args ...any) {
l.log(slog.LevelInfo, format, args...)
}
// Errorf formats according to a format specifier and logs at
// [slog.LevelError].
func (l agentLogger) Errorf(format string, args ...any) {
l.log(slog.LevelError, format, args...)
}
// log formats according to a format specifier and logs at the
// specified [slog.Level].
func (l agentLogger) log(level slog.Level, format string, args ...any) {
if !l.logger.Enabled(context.Background(), level) {
return
}
var pcs [1]uintptr
runtime.Callers(3, pcs[:]) // skip [Callers, agentLogger.log, agentLogger.Levelf]
r := slog.NewRecord(time.Now(), level, fmt.Sprintf(format, args...), pcs[0])
_ = l.logger.Handler().Handle(context.Background(), r)
}