You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2019/06/07 08:25:30 UTC

svn commit: r1860741 - /spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm

Author: hege
Date: Fri Jun  7 08:25:30 2019
New Revision: 1860741

URL: http://svn.apache.org/viewvc?rev=1860741&view=rev
Log:
Suppress duplicate log lines

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm?rev=1860741&r1=1860740&r2=1860741&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm Fri Jun  7 08:25:30 2019
@@ -61,6 +61,10 @@ my %log_level = (
 # global shared object
 our %LOG_SA;
 our $LOG_ENTERED;  # to avoid recursion on die or warn from within logging
+# duplicate message line suppressor
+our $LOG_DUPMIN = 10; # only start suppressing after x duplicate lines
+our $LOG_DUPLINE = ''; # remembers last log line
+our $LOG_DUPCNT = 0; # counts duplicates
 
 # defaults
 $LOG_SA{level} = WARNING;       # log info, warnings and errors
@@ -168,6 +172,25 @@ sub log_message {
   my $message = join(" ", @message);
   $message =~ s/[\r\n]+$//;		# remove any trailing newlines
 
+  # suppress duplicate loglines
+  if ($message eq $LOG_DUPLINE) {
+    $LOG_DUPCNT++;
+    # only start suppressing after x identical lines
+    if ($LOG_DUPCNT >= $LOG_DUPMIN) {
+      $LOG_ENTERED = 0;
+      return;
+    }
+  } else {
+    if ($LOG_DUPCNT >= $LOG_DUPMIN) {
+      $LOG_DUPCNT -= $LOG_DUPMIN - 1;
+      while (my ($name, $object) = each %{ $LOG_SA{method} }) {
+        $object->log_message($level, "--- last message repeated $LOG_DUPCNT times ---");
+      }
+    }
+    $LOG_DUPCNT = 0;
+    $LOG_DUPLINE = $message;
+  }
+
   # split on newlines and call log_message multiple times; saves
   # the subclasses having to understand multi-line logs
   my $first = 1;