summaryrefslogtreecommitdiff
path: root/internal/log
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-11-11 15:45:19 +0000
committerLibravatar GitHub <noreply@github.com>2024-11-11 15:45:19 +0000
commite3c2b790fd4329494979bd27be7fa162600f1436 (patch)
tree4f33353453cf45a670149e3d9f7dedc56ad79a88 /internal/log
parent[chore]: Bump golang.org/x/net from 0.30.0 to 0.31.0 (#3536) (diff)
downloadgotosocial-e3c2b790fd4329494979bd27be7fa162600f1436.tar.xz
[performance] minimise log field allocations (#3529)
* when appending log field only do so by minimal amount * move slice utils to separate package to fix import cycle, add GrowJust() and AppendJust() functions * fix GrowJust() not returning slice of same length * improved xslices tests * make AppendJust() test check for slice contents, fix AppendJust() final copying behaviour * add a +1 with field growth to try minimise allocation for log 'msg' field
Diffstat (limited to 'internal/log')
-rw-r--r--internal/log/log.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/internal/log/log.go b/internal/log/log.go
index bb2e561b3..52703ef28 100644
--- a/internal/log/log.go
+++ b/internal/log/log.go
@@ -22,11 +22,11 @@ import (
"fmt"
"log/syslog"
"os"
- "slices"
"strings"
"time"
"codeberg.org/gruf/go-kv"
+ "github.com/superseriousbusiness/gotosocial/internal/util/xslices"
)
var (
@@ -412,7 +412,10 @@ func logf(ctx context.Context, depth int, lvl LEVEL, fields []kv.Field, s string
buf.B = append(buf.B, lvlstrs[lvl]...)
buf.B = append(buf.B, ' ')
- if ctx != nil {
+ if ctx != nil && len(ctxhooks) > 0 {
+ // Ensure fields have space for hooks (+1 for below).
+ fields = xslices.GrowJust(fields, len(ctxhooks)+1)
+
// Pass context through hooks.
for _, hook := range ctxhooks {
fields = hook(ctx, fields)
@@ -420,9 +423,8 @@ func logf(ctx context.Context, depth int, lvl LEVEL, fields []kv.Field, s string
}
if s != "" {
- // Append message to log fields.
- fields = slices.Grow(fields, 1)
- fields = append(fields, kv.Field{
+ // Append message (if given) as final log field.
+ fields = xslices.AppendJust(fields, kv.Field{
K: "msg", V: fmt.Sprintf(s, a...),
})
}