From e234e773ab3f712ab3ca08a08bcd2c1e1d37f26c Mon Sep 17 00:00:00 2001 From: "R.I.Pienaar" Date: Fri, 9 Dec 2022 11:53:52 +0100 Subject: [PATCH] Rate limit frequent debug log lines With the increase use of subject based limits not being able to store due to limits exceeded happens frequently and makes running the server in debug quite noisy, so we rate limit this log line even in debug Signed-off-by: R.I.Pienaar --- server/log.go | 8 ++++++++ server/stream.go | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/log.go b/server/log.go index 4b9193c0..143a56ab 100644 --- a/server/log.go +++ b/server/log.go @@ -214,6 +214,14 @@ func (s *Server) RateLimitWarnf(format string, v ...interface{}) { s.Warnf("%s", statement) } +func (s *Server) RateLimitDebugf(format string, v ...interface{}) { + statement := fmt.Sprintf(format, v...) + if _, loaded := s.rateLimitLogging.LoadOrStore(statement, time.Now()); loaded { + return + } + s.Debugf("%s", statement) +} + // Fatalf logs a fatal error func (s *Server) Fatalf(format string, v ...interface{}) { s.executeLogCall(func(logger Logger, format string, v ...interface{}) { diff --git a/server/stream.go b/server/stream.go index 13621781..bc5cc7ab 100644 --- a/server/stream.go +++ b/server/stream.go @@ -3966,7 +3966,7 @@ func (mset *stream) processJetStreamMsg(subject, reply string, hdr, msg []byte, switch err { case ErrMaxMsgs, ErrMaxBytes, ErrMaxMsgsPerSubject, ErrMsgTooLarge: - s.Debugf("JetStream failed to store a msg on stream '%s > %s': %v", accName, name, err) + s.RateLimitDebugf("JetStream failed to store a msg on stream '%s > %s': %v", accName, name, err) case ErrStoreClosed: default: s.Errorf("JetStream failed to store a msg on stream '%s > %s': %v", accName, name, err)