Skip to content

Commit b6fd533

Browse files
committed
Wire up xlog to retryablehttp
Wrapper inspired by hashicorp/go-retryablehttp#101 (comment).
1 parent a021a47 commit b6fd533

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

internal/app/xhttp/handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/thecodingmachine/gotenberg/internal/pkg/conf"
1616
"github.com/thecodingmachine/gotenberg/internal/pkg/printer"
1717
"github.com/thecodingmachine/gotenberg/internal/pkg/xerror"
18+
"github.com/thecodingmachine/gotenberg/internal/pkg/xlog"
1819
"github.com/thecodingmachine/gotenberg/internal/pkg/xrand"
1920
"github.com/thecodingmachine/gotenberg/internal/pkg/xtime"
2021
)
@@ -344,6 +345,7 @@ func convertAsync(ctx context.Context, p printer.Printer, filename, fpath string
344345
webhookURL,
345346
)
346347
httpClient := retryablehttp.NewClient()
348+
httpClient.Logger = retryablehttp.LeveledLogger(xlog.NewLeveledLogger(logger, op))
347349
httpClient.HTTPClient.Timeout = xtime.Duration(webhookURLTimeout)
348350
req, err := retryablehttp.NewRequest(http.MethodPost, webhookURL, f)
349351
if err != nil {
@@ -418,6 +420,7 @@ func sendToErrorWebhook(ctx context.Context, xerr error) {
418420
}
419421
req.Header.Set(echo.HeaderContentType, "application/json")
420422
httpClient := retryablehttp.NewClient()
423+
httpClient.Logger = retryablehttp.LeveledLogger(xlog.NewLeveledLogger(logger, op))
421424
httpClient.HTTPClient.Timeout = xtime.Duration(webhookURLTimeout)
422425
resp, err := httpClient.Do(req) /* #nosec */
423426
if err != nil {

internal/pkg/xlog/xlog.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,41 @@ func (l Logger) ErrorOpf(op, format string, args ...interface{}) {
139139
func (l Logger) FatalOp(op string, err error) {
140140
l.entry.WithField("op", op).Fatal(err.Error())
141141
}
142+
143+
type LeveledLogger struct {
144+
logger Logger
145+
op string
146+
}
147+
148+
func NewLeveledLogger(logger Logger, op string) *LeveledLogger {
149+
return &LeveledLogger{
150+
logger: logger,
151+
op: op,
152+
}
153+
}
154+
155+
func (l *LeveledLogger) fields(keysAndValues ...interface{}) map[string]interface{} {
156+
fields := make(map[string]interface{})
157+
158+
for i := 0; i < len(keysAndValues)-1; i += 2 {
159+
fields[keysAndValues[i].(string)] = keysAndValues[i+1]
160+
}
161+
162+
return fields
163+
}
164+
165+
func (l *LeveledLogger) Error(msg string, keysAndValues ...interface{}) {
166+
l.logger.WithFields(l.fields(keysAndValues...)).ErrorOpf(l.op, "%s", msg)
167+
}
168+
169+
func (l *LeveledLogger) Info(msg string, keysAndValues ...interface{}) {
170+
l.logger.WithFields(l.fields(keysAndValues...)).InfoOpf(l.op, "%s", msg)
171+
}
172+
173+
func (l *LeveledLogger) Debug(msg string, keysAndValues ...interface{}) {
174+
l.logger.WithFields(l.fields(keysAndValues...)).DebugOpf(l.op, "%s", msg)
175+
}
176+
177+
func (l *LeveledLogger) Warn(msg string, keysAndValues ...interface{}) {
178+
l.logger.WithFields(l.fields(keysAndValues...)).ErrorOpf(l.op, "%s", msg)
179+
}

0 commit comments

Comments
 (0)