diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go index dc3b0f97ce..2c7ccf60bc 100644 --- a/cmd/bootnode/main.go +++ b/cmd/bootnode/main.go @@ -45,7 +45,7 @@ func main() { natdesc = flag.String("nat", "none", "port mapping mechanism (any|none|upnp|pmp|pmp:|extip:)") netrestrict = flag.String("netrestrict", "", "restrict network communication to the given IP networks (CIDR masks)") runv5 = flag.Bool("v5", false, "run a v5 topic discovery bootnode") - verbosity = flag.Int("verbosity", int(log.LevelInfo), "log verbosity (0-5)") + verbosity = flag.Int("verbosity", int(log.LvlInfo), "log verbosity (0-5)") vmodule = flag.String("vmodule", "", "log verbosity pattern") nodeKey *ecdsa.PrivateKey diff --git a/cmd/evm/blockrunner.go b/cmd/evm/blockrunner.go index b3a2f46142..ff65574586 100644 --- a/cmd/evm/blockrunner.go +++ b/cmd/evm/blockrunner.go @@ -49,6 +49,7 @@ func blockTestCmd(ctx *cli.Context) error { if len(ctx.Args().First()) == 0 { return errors.New("path-to-test argument required") } + var tracer vm.EVMLogger // Configure the EVM logger if ctx.Bool(MachineFlag.Name) { diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index 4a6f9ba1cb..887a50775d 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -2438,7 +2438,7 @@ func (s *Syncer) OnAccounts(peer SyncPeer, id uint64, hashes []common.Hash, acco for _, node := range proof { size += common.StorageSize(len(node)) } - logger := peer.Log().With("reqid", id) + logger := peer.Log().New("reqid", id) logger.Trace("Delivering range of accounts", "hashes", len(hashes), "accounts", len(accounts), "proofs", len(proof), "bytes", size) // Whether or not the response is valid, we can mark the peer as idle and @@ -2548,7 +2548,7 @@ func (s *Syncer) onByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) error for _, code := range bytecodes { size += common.StorageSize(len(code)) } - logger := peer.Log().With("reqid", id) + logger := peer.Log().New("reqid", id) logger.Trace("Delivering set of bytecodes", "bytecodes", len(bytecodes), "bytes", size) // Whether or not the response is valid, we can mark the peer as idle and @@ -2661,7 +2661,7 @@ func (s *Syncer) OnStorage(peer SyncPeer, id uint64, hashes [][]common.Hash, slo for _, node := range proof { size += common.StorageSize(len(node)) } - logger := peer.Log().With("reqid", id) + logger := peer.Log().New("reqid", id) logger.Trace("Delivering ranges of storage slots", "accounts", len(hashes), "hashes", hashCount, "slots", slotCount, "proofs", len(proof), "size", size) // Whether or not the response is valid, we can mark the peer as idle and @@ -2795,7 +2795,7 @@ func (s *Syncer) OnTrieNodes(peer SyncPeer, id uint64, trienodes [][]byte) error for _, node := range trienodes { size += common.StorageSize(len(node)) } - logger := peer.Log().With("reqid", id) + logger := peer.Log().New("reqid", id) logger.Trace("Delivering set of healing trienodes", "trienodes", len(trienodes), "bytes", size) // Whether or not the response is valid, we can mark the peer as idle and @@ -2902,7 +2902,7 @@ func (s *Syncer) onHealByteCodes(peer SyncPeer, id uint64, bytecodes [][]byte) e for _, code := range bytecodes { size += common.StorageSize(len(code)) } - logger := peer.Log().With("reqid", id) + logger := peer.Log().New("reqid", id) logger.Trace("Delivering set of healing bytecodes", "bytecodes", len(bytecodes), "bytes", size) // Whether or not the response is valid, we can mark the peer as idle and diff --git a/internal/debug/flags.go b/internal/debug/flags.go index ef7d19ceec..275ff6d405 100644 --- a/internal/debug/flags.go +++ b/internal/debug/flags.go @@ -175,7 +175,7 @@ var ( func init() { glogger = log.NewGlogHandler(log.TerminalHandler(os.Stderr, false)) - glogger.Verbosity(log.LevelInfo) + glogger.Verbosity(log.LvlInfo) log.SetDefault(log.NewLogger(glogger)) } @@ -204,7 +204,6 @@ func Setup(ctx *cli.Context) error { } else { context = append(context, "format", "terminal") } - if rotation { // Lumberjack uses -lumberjack.log in is.TempDir() if empty. // so typically /tmp/geth-lumberjack.log on linux diff --git a/internal/testlog/testlog.go b/internal/testlog/testlog.go index 70c406b0e8..9bc6f4f579 100644 --- a/internal/testlog/testlog.go +++ b/internal/testlog/testlog.go @@ -157,6 +157,10 @@ func (l *logger) With(ctx ...interface{}) log.Logger { return &logger{l.t, l.l.With(ctx...), l.mu, l.h} } +func (l *logger) New(ctx ...interface{}) log.Logger { + return l.With(ctx...) +} + // flush writes all buffered messages and clears the buffer. func (l *logger) flush() { l.t.Helper() diff --git a/log/logger.go b/log/logger.go index d885f288c5..5426425c58 100644 --- a/log/logger.go +++ b/log/logger.go @@ -29,6 +29,11 @@ const ( LevelWarn = slog.LevelWarn LevelError = slog.LevelError LevelCrit slog.Level = 12 + + // for backward-compatibility + LvlTrace = LevelTrace + LvlInfo = LevelInfo + LvlDebug = LevelDebug ) // convert from old Geth verbosity level constants @@ -108,6 +113,9 @@ type Logger interface { // With returns a new Logger that has this logger's attributes plus the given attributes With(ctx ...interface{}) Logger + // With returns a new Logger that has this logger's attributes plus the given attributes. Identical to 'With'. + New(ctx ...interface{}) Logger + // Log logs a message at the specified level with context key/value pairs Log(level slog.Level, msg string, ctx ...interface{}) @@ -196,6 +204,10 @@ func (l *logger) With(ctx ...interface{}) Logger { return &logger{l.inner.With(ctx...)} } +func (l *logger) New(ctx ...interface{}) Logger { + return l.With(ctx...) +} + func (l *logger) Trace(msg string, ctx ...interface{}) { l.write(LevelTrace, msg, ctx...) } diff --git a/node/rpcstack_test.go b/node/rpcstack_test.go index 2eb47b7331..e41cc51ad3 100644 --- a/node/rpcstack_test.go +++ b/node/rpcstack_test.go @@ -241,7 +241,7 @@ func createAndStartServer(t *testing.T, conf *httpConfig, ws bool, wsConf *wsCon if timeouts == nil { timeouts = &rpc.DefaultHTTPTimeouts } - srv := newHTTPServer(testlog.Logger(t, log.LevelDebug), *timeouts) + srv := newHTTPServer(testlog.Logger(t, log.LvlDebug), *timeouts) assert.NoError(t, srv.enableRPC(apis(), *conf)) if ws { assert.NoError(t, srv.enableWS(nil, *wsConf)) diff --git a/p2p/dial_test.go b/p2p/dial_test.go index c70bba7194..13908f11ea 100644 --- a/p2p/dial_test.go +++ b/p2p/dial_test.go @@ -422,7 +422,7 @@ func runDialTest(t *testing.T, config dialConfig, rounds []dialTestRound) { config.clock = clock config.dialer = dialer config.resolver = resolver - config.log = testlog.Logger(t, log.LevelTrace) + config.log = testlog.Logger(t, log.LvlTrace) config.rand = rand.New(rand.NewSource(0x1111)) // Set up the dialer. The setup function below runs on the dialTask diff --git a/p2p/discover/v4_udp_test.go b/p2p/discover/v4_udp_test.go index 17d1ed0fc5..48bc014ee8 100644 --- a/p2p/discover/v4_udp_test.go +++ b/p2p/discover/v4_udp_test.go @@ -74,7 +74,7 @@ func newUDPTest(t *testing.T) *udpTest { ln := enode.NewLocalNode(test.db, test.localkey) test.udp, _ = ListenV4(test.pipe, ln, Config{ PrivateKey: test.localkey, - Log: testlog.Logger(t, log.LevelTrace), + Log: testlog.Logger(t, log.LvlTrace), }) test.table = test.udp.tab // Wait for initial refresh so the table doesn't send unexpected findnode. diff --git a/p2p/discover/v5_udp_test.go b/p2p/discover/v5_udp_test.go index d7894a4b14..8b6b6643ce 100644 --- a/p2p/discover/v5_udp_test.go +++ b/p2p/discover/v5_udp_test.go @@ -769,7 +769,7 @@ func newUDPV5Test(t *testing.T) *udpV5Test { ln.Set(enr.UDP(30303)) test.udp, _ = ListenV5(test.pipe, ln, Config{ PrivateKey: test.localkey, - Log: testlog.Logger(t, log.LevelTrace), + Log: testlog.Logger(t, log.LvlTrace), ValidSchemes: enode.ValidSchemesForTesting, }) test.udp.codec = &testCodec{test: test, id: ln.ID()} diff --git a/p2p/dnsdisc/client_test.go b/p2p/dnsdisc/client_test.go index a910ac409c..abc35ddbd3 100644 --- a/p2p/dnsdisc/client_test.go +++ b/p2p/dnsdisc/client_test.go @@ -57,7 +57,7 @@ func TestClientSyncTree(t *testing.T) { wantSeq = uint(1) ) - c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LevelTrace)}) + c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) stree, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n") if err != nil { t.Fatal("sync error:", err) @@ -91,7 +91,7 @@ func TestClientSyncTreeBadNode(t *testing.T) { "C7HRFPF3BLGF3YR4DY5KX3SMBE.n": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", "INDMVBZEEQ4ESVYAKGIYU74EAA.n": "enr:-----", } - c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LevelTrace)}) + c := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) _, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n") wantErr := nameError{name: "INDMVBZEEQ4ESVYAKGIYU74EAA.n", err: entryError{typ: "enr", err: errInvalidENR}} if err != wantErr { @@ -110,7 +110,7 @@ func TestIterator(t *testing.T) { c := NewClient(Config{ Resolver: r, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RateLimit: 500, }) it, err := c.NewIterator(url) @@ -174,7 +174,7 @@ func TestIteratorLinks(t *testing.T) { c := NewClient(Config{ Resolver: newMapResolver(tree1.ToTXT("t1"), tree2.ToTXT("t2")), - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RateLimit: 500, }) it, err := c.NewIterator(url2) @@ -195,7 +195,7 @@ func TestIteratorNodeUpdates(t *testing.T) { resolver = newMapResolver() c = NewClient(Config{ Resolver: resolver, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RecheckInterval: 20 * time.Minute, RateLimit: 500, }) @@ -233,7 +233,7 @@ func TestIteratorRootRecheckOnFail(t *testing.T) { resolver = newMapResolver() c = NewClient(Config{ Resolver: resolver, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RecheckInterval: 20 * time.Minute, RateLimit: 500, // Disabling the cache is required for this test because the client doesn't @@ -271,7 +271,7 @@ func TestIteratorEmptyTree(t *testing.T) { resolver = newMapResolver() c = NewClient(Config{ Resolver: resolver, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RecheckInterval: 20 * time.Minute, RateLimit: 500, }) @@ -332,7 +332,7 @@ func TestIteratorLinkUpdates(t *testing.T) { resolver = newMapResolver() c = NewClient(Config{ Resolver: resolver, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), RecheckInterval: 20 * time.Minute, RateLimit: 500, }) diff --git a/p2p/peer.go b/p2p/peer.go index 577e473731..65a7903f58 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -235,7 +235,7 @@ func newPeer(log log.Logger, conn *conn, protocols []Protocol) *Peer { protoErr: make(chan error, len(protomap)+1), // protocols + pingLoop closed: make(chan struct{}), pingRecv: make(chan struct{}, 16), - log: log.With("id", conn.node.ID(), "conn", conn.flags), + log: log.New("id", conn.node.ID(), "conn", conn.flags), } return p } diff --git a/p2p/server.go b/p2p/server.go index fe4dba49c7..8f42765a8c 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -977,7 +977,7 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro } else { c.node = nodeFromConn(remotePubkey, c.fd) } - clog := srv.log.With("id", c.node.ID(), "addr", c.fd.RemoteAddr(), "conn", c.flags) + clog := srv.log.New("id", c.node.ID(), "addr", c.fd.RemoteAddr(), "conn", c.flags) err = srv.checkpoint(c, srv.checkpointPostHandshake) if err != nil { clog.Trace("Rejected peer", "err", err) diff --git a/p2p/server_nat_test.go b/p2p/server_nat_test.go index a92b59c99e..de935fcfc5 100644 --- a/p2p/server_nat_test.go +++ b/p2p/server_nat_test.go @@ -36,7 +36,7 @@ func TestServerPortMapping(t *testing.T) { NoDial: true, ListenAddr: ":0", NAT: mockNAT, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), clock: clock, }, } diff --git a/p2p/server_test.go b/p2p/server_test.go index 4849902503..a0491e984a 100644 --- a/p2p/server_test.go +++ b/p2p/server_test.go @@ -75,7 +75,7 @@ func startTestServer(t *testing.T, remoteKey *ecdsa.PublicKey, pf func(*Peer)) * ListenAddr: "127.0.0.1:0", NoDiscovery: true, PrivateKey: newkey(), - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), } server := &Server{ Config: config, @@ -211,7 +211,7 @@ func TestServerRemovePeerDisconnect(t *testing.T) { PrivateKey: newkey(), MaxPeers: 1, NoDiscovery: true, - Logger: testlog.Logger(t, log.LevelTrace).With("server", "1"), + Logger: testlog.Logger(t, log.LvlTrace).New("server", "1"), }} srv2 := &Server{Config: Config{ PrivateKey: newkey(), @@ -219,7 +219,7 @@ func TestServerRemovePeerDisconnect(t *testing.T) { NoDiscovery: true, NoDial: true, ListenAddr: "127.0.0.1:0", - Logger: testlog.Logger(t, log.LevelTrace).With("server", "2"), + Logger: testlog.Logger(t, log.LvlTrace).New("server", "2"), }} srv1.Start() defer srv1.Stop() @@ -255,7 +255,7 @@ func TestServerAtCap(t *testing.T) { NoDial: true, NoDiscovery: true, TrustedNodes: []*enode.Node{newNode(trustedID, "")}, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), }, } if err := srv.Start(); err != nil { @@ -331,7 +331,7 @@ func TestServerPeerLimits(t *testing.T) { NoDial: true, NoDiscovery: true, Protocols: []Protocol{discard}, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), }, newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { return tp }, } @@ -438,7 +438,7 @@ func TestServerSetupConn(t *testing.T) { NoDial: true, NoDiscovery: true, Protocols: []Protocol{discard}, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), } srv := &Server{ Config: cfg, @@ -525,7 +525,7 @@ func TestServerInboundThrottle(t *testing.T) { NoDial: true, NoDiscovery: true, Protocols: []Protocol{discard}, - Logger: testlog.Logger(t, log.LevelTrace), + Logger: testlog.Logger(t, log.LvlTrace), }, newTransport: func(fd net.Conn, dialDest *ecdsa.PublicKey) transport { newTransportCalled <- struct{}{} diff --git a/p2p/simulations/adapters/types.go b/p2p/simulations/adapters/types.go index 96ef7bb4d8..754047bdf0 100644 --- a/p2p/simulations/adapters/types.go +++ b/p2p/simulations/adapters/types.go @@ -228,7 +228,7 @@ func RandomNodeConfig() *NodeConfig { Name: fmt.Sprintf("node_%s", enodId.String()), Port: port, EnableMsgEvents: true, - LogVerbosity: log.LevelInfo, + LogVerbosity: log.LvlInfo, } } diff --git a/p2p/simulations/examples/ping-pong.go b/p2p/simulations/examples/ping-pong.go index 6072e07b93..11f2bf221c 100644 --- a/p2p/simulations/examples/ping-pong.go +++ b/p2p/simulations/examples/ping-pong.go @@ -137,7 +137,7 @@ const ( // Run implements the ping-pong protocol which sends ping messages to the peer // at 10s intervals, and responds to pings with pong messages. func (p *pingPongService) Run(peer *p2p.Peer, rw p2p.MsgReadWriter) error { - log := p.log.With("peer.id", peer.ID()) + log := p.log.New("peer.id", peer.ID()) errC := make(chan error, 1) go func() { diff --git a/rpc/handler.go b/rpc/handler.go index 87c836e246..f44e4d7b01 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -89,7 +89,7 @@ func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg * batchResponseMaxSize: batchResponseMaxSize, } if conn.remoteAddr() != "" { - h.log = h.log.With("conn", conn.remoteAddr()) + h.log = h.log.New("conn", conn.remoteAddr()) } h.unsubscribeCb = newCallback(reflect.Value{}, reflect.ValueOf(h.unsubscribe)) return h