Skip to content

Commit da810a1

Browse files
authored
feat: Migrate to log/slog (#3364)
1 parent 83d7775 commit da810a1

File tree

109 files changed

+976
-660
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+976
-660
lines changed

config/config.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/libp2p/go-libp2p/core/sec"
2424
"github.com/libp2p/go-libp2p/core/sec/insecure"
2525
"github.com/libp2p/go-libp2p/core/transport"
26+
logging "github.com/libp2p/go-libp2p/gologshim"
2627
"github.com/libp2p/go-libp2p/p2p/host/autonat"
2728
"github.com/libp2p/go-libp2p/p2p/host/autorelay"
2829
bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
@@ -51,6 +52,8 @@ import (
5152
"go.uber.org/fx/fxevent"
5253
)
5354

55+
var log = logging.Logger("p2p-config")
56+
5457
// AddrsFactory is a function that takes a set of multiaddrs we're listening on and
5558
// returns the set of multiaddrs we should advertise to the network.
5659
type AddrsFactory = bhost.AddrsFactory
@@ -159,9 +162,7 @@ func (cfg *Config) makeSwarm(eventBus event.Bus, enableMetrics bool) (*swarm.Swa
159162

160163
// Check this early. Prevents us from even *starting* without verifying this.
161164
if pnet.ForcePrivateNetwork && len(cfg.PSK) == 0 {
162-
log.Error("tried to create a libp2p node with no Private" +
163-
" Network Protector but usage of Private Networks" +
164-
" is forced by the environment")
165+
log.Error("tried to create a libp2p node with no Private Network Protector but usage of Private Networks is forced by the environment")
165166
// Note: This is *also* checked the upgrader itself, so it'll be
166167
// enforced even *if* you don't use the libp2p constructor.
167168
return nil, pnet.ErrNotInPrivateNetwork
@@ -288,7 +289,11 @@ func (cfg *Config) makeAutoNATV2Host() (host.Host, error) {
288289

289290
func (cfg *Config) addTransports() ([]fx.Option, error) {
290291
fxopts := []fx.Option{
291-
fx.WithLogger(func() fxevent.Logger { return getFXLogger() }),
292+
fx.WithLogger(func() fxevent.Logger {
293+
return &fxevent.SlogLogger{
294+
Logger: log.With("system", "fx"),
295+
}
296+
}),
292297
fx.Provide(fx.Annotate(tptu.New, fx.ParamTags(`name:"security"`))),
293298
fx.Supply(cfg.Muxers),
294299
fx.Provide(func() connmgr.ConnectionGater { return cfg.ConnectionGater }),
@@ -468,7 +473,7 @@ func (cfg *Config) validate() error {
468473
if l, ok := cfg.ResourceManager.(connmgr.GetConnLimiter); ok {
469474
err := cfg.ConnManager.CheckLimit(l)
470475
if err != nil {
471-
log.Warn(fmt.Sprintf("rcmgr limit conflicts with connmgr limit: %v", err))
476+
log.Warn("rcmgr limit conflicts with connmgr limit", "err", err)
472477
}
473478
}
474479

config/log.go

Lines changed: 0 additions & 28 deletions
This file was deleted.

core/canonicallog/canonicallog.go

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,54 @@
11
package canonicallog
22

33
import (
4-
"fmt"
4+
"context"
5+
"log/slog"
56
"math/rand"
67
"net"
7-
"strings"
8+
"os"
9+
"runtime"
10+
"time"
811

912
"github.com/libp2p/go-libp2p/core/peer"
1013

11-
logging "github.com/ipfs/go-log/v2"
14+
logging "github.com/libp2p/go-libp2p/gologshim"
1215
"github.com/multiformats/go-multiaddr"
1316
manet "github.com/multiformats/go-multiaddr/net"
1417
)
1518

16-
var log = logging.WithSkip(logging.Logger("canonical-log"), 1)
19+
var log = slog.New(
20+
slog.NewTextHandler(
21+
os.Stderr,
22+
&slog.HandlerOptions{
23+
Level: logging.ConfigFromEnv().LevelForSystem("canonical-log"),
24+
AddSource: true}))
25+
26+
// logWithSkip logs at level with AddSource pointing to the caller `skip` frames up
27+
// from *this* function’s caller (so skip=0 => the immediate caller of logWithSkip).
28+
func logWithSkip(ctx context.Context, l *slog.Logger, level slog.Level, skip int, msg string, args ...any) {
29+
if !l.Enabled(ctx, level) {
30+
return
31+
}
32+
33+
var pcs [1]uintptr
34+
// +2 to skip runtime.Callers and logWithSkip itself.
35+
runtime.Callers(skip+2, pcs[:])
36+
37+
r := slog.NewRecord(time.Now(), level, msg, pcs[0])
38+
r.Add(args...)
39+
_ = l.Handler().Handle(ctx, r)
40+
}
1741

1842
// LogMisbehavingPeer is the canonical way to log a misbehaving peer.
1943
// Protocols should use this to identify a misbehaving peer to allow the end
2044
// user to easily identify these nodes across protocols and libp2p.
2145
func LogMisbehavingPeer(p peer.ID, peerAddr multiaddr.Multiaddr, component string, err error, msg string) {
22-
log.Warnf("CANONICAL_MISBEHAVING_PEER: peer=%s addr=%s component=%s err=%q msg=%q", p, peerAddr.String(), component, err, msg)
46+
logWithSkip(context.Background(), log, slog.LevelWarn, 1, "CANONICAL_MISBEHAVING_PEER",
47+
"peer", p,
48+
"addr", peerAddr,
49+
"component", component,
50+
"err", err,
51+
"msg", msg)
2352
}
2453

2554
// LogMisbehavingPeerNetAddr is the canonical way to log a misbehaving peer.
@@ -28,7 +57,12 @@ func LogMisbehavingPeer(p peer.ID, peerAddr multiaddr.Multiaddr, component strin
2857
func LogMisbehavingPeerNetAddr(p peer.ID, peerAddr net.Addr, component string, originalErr error, msg string) {
2958
ma, err := manet.FromNetAddr(peerAddr)
3059
if err != nil {
31-
log.Warnf("CANONICAL_MISBEHAVING_PEER: peer=%s net_addr=%s component=%s err=%q msg=%q", p, peerAddr.String(), component, originalErr, msg)
60+
logWithSkip(context.Background(), log, slog.LevelWarn, 1, "CANONICAL_MISBEHAVING_PEER",
61+
"peer", p,
62+
"net_addr", peerAddr.String(),
63+
"component", component,
64+
"err", originalErr,
65+
"msg", msg)
3266
return
3367
}
3468

@@ -44,14 +78,15 @@ func LogMisbehavingPeerNetAddr(p peer.ID, peerAddr net.Addr, component string, o
4478
// like fail2ban to action on the log.
4579
func LogPeerStatus(sampleRate int, p peer.ID, peerAddr multiaddr.Multiaddr, keyVals ...string) {
4680
if rand.Intn(sampleRate) == 0 {
47-
keyValsStr := strings.Builder{}
48-
for i, kOrV := range keyVals {
49-
if i%2 == 0 {
50-
fmt.Fprintf(&keyValsStr, " %v=", kOrV)
51-
} else {
52-
fmt.Fprintf(&keyValsStr, "%q", kOrV)
53-
}
81+
args := []any{
82+
"peer", p,
83+
"addr", peerAddr.String(),
84+
"sample_rate", sampleRate,
85+
}
86+
// Add the additional key-value pairs
87+
for _, kv := range keyVals {
88+
args = append(args, kv)
5489
}
55-
log.Infof("CANONICAL_PEER_STATUS: peer=%s addr=%s sample_rate=%v%s", p, peerAddr.String(), sampleRate, keyValsStr.String())
90+
logWithSkip(context.Background(), log, slog.LevelInfo, 1, "CANONICAL_PEER_STATUS", args...)
5691
}
5792
}

core/canonicallog/canonicallog_test.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@ package canonicallog
22

33
import (
44
"fmt"
5+
"log/slog"
56
"net"
7+
"os"
68
"testing"
79

810
"github.com/libp2p/go-libp2p/core/test"
911

10-
logging "github.com/ipfs/go-log/v2"
1112
"github.com/multiformats/go-multiaddr"
1213
)
1314

1415
func TestLogs(t *testing.T) {
15-
err := logging.SetLogLevel("canonical-log", "info")
16-
if err != nil {
17-
t.Fatal(err)
18-
}
16+
originalLogger := log
17+
defer func() {
18+
log = originalLogger
19+
}()
20+
// Override to print debug logs
21+
log = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo, AddSource: true}))
1922

2023
LogMisbehavingPeer(test.RandPeerIDFatal(t), multiaddr.StringCast("/ip4/1.2.3.4"), "somecomponent", fmt.Errorf("something"), "hi")
2124

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ require (
1818
github.com/huin/goupnp v1.3.0
1919
github.com/ipfs/go-cid v0.5.0
2020
github.com/ipfs/go-datastore v0.8.2
21-
github.com/ipfs/go-log/v2 v2.6.0
2221
github.com/jackpal/go-nat-pmp v1.0.2
2322
github.com/jbenet/go-temp-err-catcher v0.1.0
2423
github.com/klauspost/compress v1.18.0
@@ -60,7 +59,6 @@ require (
6059
go.uber.org/fx v1.24.0
6160
go.uber.org/goleak v1.3.0
6261
go.uber.org/mock v0.5.2
63-
go.uber.org/zap v1.27.0
6462
golang.org/x/crypto v0.39.0
6563
golang.org/x/sync v0.15.0
6664
golang.org/x/sys v0.33.0
@@ -76,7 +74,6 @@ require (
7674
github.com/francoispqt/gojay v1.2.13 // indirect
7775
github.com/google/uuid v1.6.0 // indirect
7876
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
79-
github.com/mattn/go-isatty v0.0.20 // indirect
8077
github.com/miekg/dns v1.1.66 // indirect
8178
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
8279
github.com/minio/sha256-simd v1.0.1 // indirect
@@ -103,6 +100,7 @@ require (
103100
github.com/wlynxg/anet v0.0.5 // indirect
104101
go.uber.org/dig v1.19.0 // indirect
105102
go.uber.org/multierr v1.11.0 // indirect
103+
go.uber.org/zap v1.27.0 // indirect
106104
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 // indirect
107105
golang.org/x/mod v0.25.0 // indirect
108106
golang.org/x/net v0.41.0 // indirect

go.sum

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ github.com/ipfs/go-datastore v0.8.2 h1:Jy3wjqQR6sg/LhyY0NIePZC3Vux19nLtg7dx0TVqr
7777
github.com/ipfs/go-datastore v0.8.2/go.mod h1:W+pI1NsUsz3tcsAACMtfC+IZdnQTnC/7VfPoJBQuts0=
7878
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
7979
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
80-
github.com/ipfs/go-log/v2 v2.6.0 h1:2Nu1KKQQ2ayonKp4MPo6pXCjqw1ULc9iohRqWV5EYqg=
81-
github.com/ipfs/go-log/v2 v2.6.0/go.mod h1:p+Efr3qaY5YXpx9TX7MoLCSEZX5boSWj9wh86P5HJa8=
8280
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
8381
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
8482
github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk=
@@ -126,8 +124,6 @@ github.com/marcopolo/simnet v0.0.1 h1:rSMslhPz6q9IvJeFWDoMGxMIrlsbXau3NkuIXHGJxf
126124
github.com/marcopolo/simnet v0.0.1/go.mod h1:WDaQkgLAjqDUEBAOXz22+1j6wXKfGlC5sD5XWt3ddOs=
127125
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
128126
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
129-
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
130-
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
131127
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
132128
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
133129
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
@@ -378,7 +374,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
378374
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
379375
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
380376
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
381-
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
382377
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
383378
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
384379
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

0 commit comments

Comments
 (0)