diff --git a/.changeset/quiet-books-design.md b/.changeset/quiet-books-design.md new file mode 100644 index 000000000000..8c7c7cdc84a5 --- /dev/null +++ b/.changeset/quiet-books-design.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/proxyd': patch +--- + +Parameterize full RPC request logging diff --git a/proxyd/config.go b/proxyd/config.go index 26929d9f6ef6..db46167c1d60 100644 --- a/proxyd/config.go +++ b/proxyd/config.go @@ -18,6 +18,9 @@ type ServerConfig struct { TimeoutSeconds int `toml:"timeout_seconds"` MaxUpstreamBatchSize int `toml:"max_upstream_batch_size"` + + EnableRequestLog bool `toml:"enable_request_log"` + MaxRequestBodyLogLen int `toml:"max_request_body_log_len"` } type CacheConfig struct { diff --git a/proxyd/proxyd.go b/proxyd/proxyd.go index a730a608592e..4b616c587b59 100644 --- a/proxyd/proxyd.go +++ b/proxyd/proxyd.go @@ -222,6 +222,8 @@ func Start(config *Config) (func(), error) { secondsToDuration(config.Server.TimeoutSeconds), config.Server.MaxUpstreamBatchSize, rpcCache, + config.Server.EnableRequestLog, + config.Server.MaxRequestBodyLogLen, ) if config.Metrics.Enabled { diff --git a/proxyd/server.go b/proxyd/server.go index f0db53180a51..58cd73946a7b 100644 --- a/proxyd/server.go +++ b/proxyd/server.go @@ -28,7 +28,7 @@ const ( MaxBatchRPCCalls = 100 cacheStatusHdr = "X-Proxyd-Cache-Status" defaultServerTimeout = time.Second * 10 - maxLogLength = 2000 + maxRequestBodyLogLen = 2000 defaultMaxUpstreamBatchSize = 10 ) @@ -40,6 +40,8 @@ type Server struct { wsMethodWhitelist *StringSet rpcMethodMappings map[string]string maxBodySize int64 + enableRequestLog bool + maxRequestBodyLogLen int authenticatedPaths map[string]string timeout time.Duration maxUpstreamBatchSize int @@ -60,6 +62,8 @@ func NewServer( timeout time.Duration, maxUpstreamBatchSize int, cache RPCCache, + enableRequestLog bool, + maxRequestBodyLogLen int, ) *Server { if cache == nil { cache = &NoopRPCCache{} @@ -87,6 +91,8 @@ func NewServer( timeout: timeout, maxUpstreamBatchSize: maxUpstreamBatchSize, cache: cache, + enableRequestLog: enableRequestLog, + maxRequestBodyLogLen: maxRequestBodyLogLen, upgrader: &websocket.Upgrader{ HandshakeTimeout: 5 * time.Second, }, @@ -169,11 +175,13 @@ func (s *Server) HandleRPC(w http.ResponseWriter, r *http.Request) { } RecordRequestPayloadSize(ctx, len(body)) - log.Info("Raw RPC request", - "body", truncate(string(body)), - "req_id", GetReqID(ctx), - "auth", GetAuthCtx(ctx), - ) + if s.enableRequestLog { + log.Info("Raw RPC request", + "body", truncate(string(body), s.maxRequestBodyLogLen), + "req_id", GetReqID(ctx), + "auth", GetAuthCtx(ctx), + ) + } if IsBatch(body) { reqs, err := ParseBatchRPCReq(body) @@ -527,9 +535,13 @@ func (n *NoopRPCCache) PutRPC(context.Context, *RPCReq, *RPCRes) error { return nil } -func truncate(str string) string { - if len(str) > maxLogLength { - return str[:maxLogLength] + "..." +func truncate(str string, maxLen int) string { + if maxLen == 0 { + maxLen = maxRequestBodyLogLen + } + + if len(str) > maxLen { + return str[:maxLen] + "..." } else { return str }