Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions example_env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Options: debug, info, warn, error, fatal
# Default: info
LOG_LEVEL=info
LOG_TRACING=1

1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ require (
github.com/stretchr/testify v1.10.0
go.uber.org/mock v0.5.2
go.uber.org/ratelimit v0.3.1
go.uber.org/zap v1.27.0
golang.org/x/crypto v0.36.0
golang.org/x/sync v0.12.0
golang.org/x/sys v0.31.0
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,8 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
Expand All @@ -846,6 +848,8 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
Expand Down
8 changes: 6 additions & 2 deletions p2p/kademlia/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,11 @@ func (s *DHT) ConfigureBootstrapNodes(ctx context.Context, bootstrapNodes string
for _, node := range mapNodes {
hID, _ := utils.Blake3Hash(node.ID)
node.HashedID = hID
fmt.Println("node adding", node.String(), "hashed id", string(node.HashedID))
logtrace.Debug(ctx, "node adding", logtrace.Fields{
logtrace.FieldModule: "p2p",
"node": node.String(),
"hashed_id": string(node.HashedID),
})
boostrapNodes = append(boostrapNodes, node)
}
}
Expand Down Expand Up @@ -267,7 +271,7 @@ func (s *DHT) Bootstrap(ctx context.Context, bootstrapNodes string) error {
// So if bootstrap failed, should try to connect to node again for next bootstrap retry
// s.cache.SetWithExpiry(addr, []byte("true"), badAddrExpiryHours*time.Hour)

logtrace.Error(ctx, "network call failed, sleeping 3 seconds", logtrace.Fields{
logtrace.Debug(ctx, "network call failed, sleeping 3 seconds", logtrace.Fields{
logtrace.FieldModule: "p2p",
logtrace.FieldError: err.Error(),
})
Expand Down
4 changes: 2 additions & 2 deletions p2p/kademlia/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ func (s *Network) handleConn(ctx context.Context, rawConn net.Conn) {
conn, err = NewSecureServerConn(ctx, s.tc, rawConn)
if err != nil {
rawConn.Close()
logtrace.Error(ctx, "Server secure handshake failed", logtrace.Fields{
logtrace.Warn(ctx, "Server secure handshake failed", logtrace.Fields{
logtrace.FieldModule: "p2p",
logtrace.FieldError: err.Error(),
})
Expand All @@ -373,7 +373,7 @@ func (s *Network) handleConn(ctx context.Context, rawConn net.Conn) {
if err == io.EOF {
return
}
logtrace.Error(ctx, "Read and decode failed", logtrace.Fields{
logtrace.Warn(ctx, "Read and decode failed", logtrace.Fields{
logtrace.FieldModule: "p2p",
logtrace.FieldError: err.Error(),
})
Expand Down
63 changes: 31 additions & 32 deletions pkg/logtrace/grpc_logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,81 +3,80 @@ package logtrace
import (
"context"
"fmt"
"os"

"google.golang.org/grpc/grpclog"
)

// grpcLogger implements grpclog.LoggerV2 interface using logtrace
type grpcLogger struct {
ctx context.Context
}
type grpcLogger struct{}

// NewGRPCLogger creates a new gRPC-compatible logger using logtrace
func NewGRPCLogger(ctx context.Context) grpclog.LoggerV2 {
return &grpcLogger{ctx: ctx}
func NewGRPCLogger() grpclog.LoggerV2 {
return &grpcLogger{}
}

// Info logs at info level
func (g *grpcLogger) Info(args ...interface{}) {
Info(g.ctx, fmt.Sprint(args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Info(args ...any) {
Debug(context.Background(), fmt.Sprint(args...), Fields{"module": "grpc"}) // Suppress Internal Logs
}

// Infof logs at info level with format
func (g *grpcLogger) Infof(format string, args ...interface{}) {
Info(g.ctx, fmt.Sprintf(format, args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Infof(format string, args ...any) {
Debug(context.Background(), fmt.Sprintf(format, args...), Fields{"module": "grpc"})
}

// Infoln logs at info level with newline
func (g *grpcLogger) Infoln(args ...interface{}) {
func (g *grpcLogger) Infoln(args ...any) {
g.Info(args...)
}

// Warning logs at warn level
func (g *grpcLogger) Warning(args ...interface{}) {
Warn(g.ctx, fmt.Sprint(args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Warning(args ...any) {
Warn(context.Background(), fmt.Sprint(args...), Fields{"module": "grpc"})
}

// Warningf logs at warn level with format
func (g *grpcLogger) Warningf(format string, args ...interface{}) {
Warn(g.ctx, fmt.Sprintf(format, args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Warningf(format string, args ...any) {
Warn(context.Background(), fmt.Sprintf(format, args...), Fields{"module": "grpc"})
}

// Warningln logs at warn level with newline
func (g *grpcLogger) Warningln(args ...interface{}) {
func (g *grpcLogger) Warningln(args ...any) {
g.Warning(args...)
}

// Error logs at error level
func (g *grpcLogger) Error(args ...interface{}) {
Error(g.ctx, fmt.Sprint(args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Error(args ...any) {
Error(context.Background(), fmt.Sprint(args...), Fields{"module": "grpc"})
}

// Errorf logs at error level with format
func (g *grpcLogger) Errorf(format string, args ...interface{}) {
Error(g.ctx, fmt.Sprintf(format, args...), Fields{FieldModule: "grpc"})
func (g *grpcLogger) Errorf(format string, args ...any) {
Error(context.Background(), fmt.Sprintf(format, args...), Fields{"module": "grpc"})
}

// Errorln logs at error level with newline
func (g *grpcLogger) Errorln(args ...interface{}) {
func (g *grpcLogger) Errorln(args ...any) {
g.Error(args...)
}

// Fatal logs at error level and panics
func (g *grpcLogger) Fatal(args ...interface{}) {
// Fatal logs at error level and exits gracefully
func (g *grpcLogger) Fatal(args ...any) {
msg := fmt.Sprint(args...)
Error(g.ctx, msg, Fields{FieldModule: "grpc", "level": "fatal"})
panic(msg)
Error(context.Background(), msg, Fields{"module": "grpc", "level": "fatal"})
os.Exit(1)
}

// Fatalf logs at error level with format and panics
func (g *grpcLogger) Fatalf(format string, args ...interface{}) {
// Fatalf logs at error level with format and exits gracefully
func (g *grpcLogger) Fatalf(format string, args ...any) {
msg := fmt.Sprintf(format, args...)
Error(g.ctx, msg, Fields{FieldModule: "grpc", "level": "fatal"})
panic(msg)
Error(context.Background(), msg, Fields{"module": "grpc", "level": "fatal"})
os.Exit(1)
}

// Fatalln logs at error level with newline and panics
func (g *grpcLogger) Fatalln(args ...interface{}) {
// Fatalln logs at error level with newline and exits
func (g *grpcLogger) Fatalln(args ...any) {
g.Fatal(args...)
}

Expand All @@ -87,6 +86,6 @@ func (g *grpcLogger) V(l int) bool {
}

// SetGRPCLogger configures gRPC to use logtrace for internal logging
func SetGRPCLogger(ctx context.Context) {
grpclog.SetLoggerV2(NewGRPCLogger(ctx))
func SetGRPCLogger() {
grpclog.SetLoggerV2(NewGRPCLogger())
}
Loading