Index: mollom.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mollom/mollom.css,v
retrieving revision 1.3
diff -u -p -r1.3 mollom.css
--- mollom.css	4 Aug 2010 03:58:46 -0000	1.3
+++ mollom.css	12 Sep 2010 04:29:01 -0000
@@ -3,3 +3,8 @@
 #edit-mollom-captcha {
   display: block;
 }
+
+/* Help themes to properly display Mollom's log messages. */
+.dblog-event pre {
+  white-space: pre-wrap;
+}
Index: mollom.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mollom/mollom.inc,v
retrieving revision 1.7
diff -u -p -r1.7 mollom.inc
--- mollom.inc	11 Sep 2010 01:30:16 -0000	1.7
+++ mollom.inc	12 Sep 2010 04:29:16 -0000
@@ -76,7 +76,13 @@ function _mollom_retrieve_server_list() 
       return $result;
     }
     else {
-      watchdog('mollom', 'Error @errno: %server - %message - mollom.getServerList', array('@errno' => xmlrpc_errno(), '%server' => $server, '%message' => xmlrpc_error_msg()), WATCHDOG_ERROR);
+      _mollom_watchdog(array(
+        'Error @errno %message from %server mollom.getServerList' => array(
+          '@errno' => xmlrpc_errno(),
+          '%server' => $server,
+          '%message' => xmlrpc_error_msg(),
+        ),
+      ), WATCHDOG_ERROR);
     }
   }
 
Index: mollom.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mollom/mollom.module,v
retrieving revision 1.72
diff -u -p -r1.72 mollom.module
--- mollom.module	12 Sep 2010 00:11:49 -0000	1.72
+++ mollom.module	12 Sep 2010 16:19:24 -0000
@@ -172,6 +172,9 @@ function mollom_init() {
       drupal_set_message($requirements['mollom']['description'], 'error');
     }
   }
+  if (strpos($_GET['q'], 'admin/reports/event/') === 0) {
+    drupal_add_css(drupal_get_path('module', 'mollom') . '/mollom.css');
+  }
 }
 
 /**
@@ -1092,12 +1095,10 @@ function _mollom_fallback() {
   }
 
   $servers = variable_get('mollom_servers', array());
-  $variables = array(
-    '%servers' => $servers ? implode(', ', $servers) : '--',
-    '@errno' => xmlrpc_errno(),
-    '%error_msg' => xmlrpc_error_msg(),
-  );
-  watchdog('mollom', 'All servers unavailable: %servers, last error: @errno - %error_msg', $variables, WATCHDOG_ERROR);
+  _mollom_watchdog(array(
+    'All servers unavailable: %servers' => array('%servers' => $servers ? implode(', ', $servers) : '--'),
+    'Last error: @code %message' => array('@code' => xmlrpc_errno(), '%message' => xmlrpc_error_msg()),
+  ), WATCHDOG_ERROR);
 }
 
 /**
@@ -1254,7 +1255,8 @@ function mollom_validate_analysis(&$form
   }
 
   // Perform textual analysis.
-  $data = mollom_form_get_values($form_state['values'], $form_state['mollom']['enabled_fields'], $form_state['mollom']['mapping']);
+  $all_data = mollom_form_get_values($form_state['values'], $form_state['mollom']['enabled_fields'], $form_state['mollom']['mapping']);
+  $data = $all_data;
   // Remove 'post_id' property; only used by mollom_form_submit().
   if (isset($data['post_id'])) {
     unset($data['post_id']);
@@ -1262,6 +1264,8 @@ function mollom_validate_analysis(&$form
   $data['session_id'] = $form_state['mollom']['response']['session_id'];
   $data['checks'] = implode(',', $form_state['mollom']['checks']);
   $result = mollom('mollom.checkContent', $data);
+  // Use all available data properties for log messages below.
+  $data += $all_data;
 
   // Trigger global fallback behavior if there is no result.
   if (!isset($result['session_id'])) {
@@ -1286,21 +1290,34 @@ function mollom_validate_analysis(&$form
   // the spam check led to a MOLLOM_ANALYSIS_UNSURE result, and the user solved
   // the CAPTCHA correctly, subsequent spam check results will likely be
   // MOLLOM_ANALYSIS_HAM (though not guaranteed).
+  $teaser = truncate_utf8(strip_tags(isset($data['post_title']) ? $data['post_title'] : isset($data['post_body']) ? $data['post_body'] : '--'), 40);
   if (isset($result['spam'])) {
     switch ($result['spam']) {
       case MOLLOM_ANALYSIS_HAM:
         $form_state['mollom']['require_captcha'] = FALSE;
-        watchdog('mollom', 'Ham: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
+        _mollom_watchdog(array(
+          'Ham: %teaser' => array('%teaser' => $teaser),
+          'Data:<pre>@data</pre>' => array('@data' => $data),
+          'Result:<pre>@result</pre>' => array('@result' => $result),
+        ), WATCHDOG_INFO);
         break;
 
       case MOLLOM_ANALYSIS_SPAM:
         $form_state['mollom']['require_captcha'] = FALSE;
         form_set_error('mollom', t('Your submission has triggered the spam filter and will not be accepted.'));
-        watchdog('mollom', 'Spam: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
+        _mollom_watchdog(array(
+          'Spam: %teaser' => array('%teaser' => $teaser),
+          'Data:<pre>@data</pre>' => array('@data' => $data),
+          'Result:<pre>@result</pre>' => array('@result' => $result),
+        ));
         break;
 
       case MOLLOM_ANALYSIS_UNSURE:
-        watchdog('mollom', 'Unsure: <pre>@message</pre>Result: <pre>@result</pre>', array('@message' => print_r($data, TRUE), '@result' => print_r($result, TRUE)));
+        _mollom_watchdog(array(
+          'Unsure: %teaser' => array('%teaser' => $teaser),
+          'Data:<pre>@data</pre>' => array('@data' => $data),
+          'Result:<pre>@result</pre>' => array('@result' => $result),
+        ), WATCHDOG_INFO);
 
         // Only throw a validation error and retrieve a CAPTCHA, if we check
         // this post for the first time. Otherwise, mollom_validate_captcha()
@@ -1367,13 +1384,16 @@ function mollom_validate_captcha(&$form,
   // Next to the Mollom session id and captcha result, the Mollom back-end also
   // takes into account the author's IP and local user id (if registered). Any
   // other values are ignored.
-  $data = mollom_form_get_values($form_state['values'], $form_state['mollom']['enabled_fields'], $form_state['mollom']['mapping']);
-  $result = mollom('mollom.checkCaptcha', array(
+  $all_data = mollom_form_get_values($form_state['values'], $form_state['mollom']['enabled_fields'], $form_state['mollom']['mapping']);
+  $data = array(
     'session_id' => $form_state['mollom']['response']['session_id'],
     'captcha_result' => $form_state['values']['mollom']['captcha'],
-    'author_ip' => $data['author_ip'],
-    'author_id' => isset($data['author_id']) ? $data['author_id'] : NULL,
-  ));
+    'author_ip' => $all_data['author_ip'],
+    'author_id' => isset($all_data['author_id']) ? $all_data['author_id'] : NULL,
+  );
+  $result = mollom('mollom.checkCaptcha', $data);
+  // Use all available data properties for log messages below.
+  $data += $all_data;
 
   // Invoke fallback behavior upon a server error; communication errors are
   // handled by mollom() already. A server error may happen in case of an
@@ -1390,14 +1410,22 @@ function mollom_validate_captcha(&$form,
     $form_state['mollom']['passed_captcha'] = TRUE;
     $form['mollom']['captcha']['#access'] = FALSE;
 
-    watchdog('mollom', 'Correct CAPTCHA: <pre>@data<pre>', array('@data' => print_r($form_state['values'], TRUE)));
+    _mollom_watchdog(array(
+      'Correct CAPTCHA' => array(),
+      'Data:<pre>@data</pre>' => array('@data' => $form_state['values']),
+      'Result:<pre>@result</pre>' => array('@result' => $result),
+    ), WATCHDOG_INFO);
   }
   else {
     // UX: Empty the CAPTCHA field value, as the user has to re-enter a new one.
     $form['mollom']['captcha']['#value'] = '';
 
     form_set_error('mollom][captcha', t('The word verification was not completed correctly. Please complete this new word verification and try again.'));
-    watchdog('mollom', 'Incorrect CAPTCHA: <pre>@data<pre>', array('@data' => print_r($form_state['values'], TRUE)));
+    _mollom_watchdog(array(
+      'Incorrect CAPTCHA' => array(),
+      'Data:<pre>@data</pre>' => array('@data' => $form_state['values']),
+      'Result:<pre>@result</pre>' => array('@result' => $result),
+    ), WATCHDOG_INFO);
   }
 }
 
@@ -1467,8 +1495,7 @@ function mollom($method, $data = array()
     }
 
     $messages[] = array(
-      'text' => 'Refreshed servers: %servers',
-      'arguments' => array('%servers' => implode(', ', $servers)),
+      'Refreshed servers: %servers' => array('%servers' => implode(', ', $servers)),
     );
 
     // Store the list of servers in the database.
@@ -1507,8 +1534,7 @@ function mollom($method, $data = array()
             variable_set('mollom_servers', $servers);
 
             $messages[] = array(
-              'text' => 'Refreshed servers: %servers',
-              'arguments' => array('%servers' => implode(', ', $servers)),
+              'Refreshed servers: %servers' => array('%servers' => implode(', ', $servers)),
             );
           }
         }
@@ -1517,25 +1543,23 @@ function mollom($method, $data = array()
           $next = next($servers);
 
           $messages[] = array(
-            'text' => 'Server %server redirected to: %next.',
-            'arguments' => array('%server' => $server, '%next' => $next),
+            'Server %server redirected to: %next.' => array('%server' => $server, '%next' => $next),
           );
         }
         else {
           $messages[] = array(
-            'text' => 'Error @errno from %server for %method: %message: <pre>@data</pre>',
-            'arguments' => array(
+            'Error @errno from %server for %method: %message' => array(
               '@errno' => $error->code,
               '%server' => $server,
               '%method' => $method,
               '%message' => $error->message,
-              '@data' => print_r($data, TRUE),
             ),
+            'Data:<pre>@data</pre>' => array('@data' => $data),
           );
 
           // Instantly return upon a 'real' error.
           if ($error->code === MOLLOM_ERROR) {
-            _mollom_watchdog($messages, WATCHDOG_ERROR);
+            _mollom_watchdog_multiple($messages, WATCHDOG_ERROR);
             return MOLLOM_ERROR;
           }
           // Otherwise, try the next server.
@@ -1543,7 +1567,7 @@ function mollom($method, $data = array()
         }
       }
       else {
-        _mollom_watchdog($messages, WATCHDOG_DEBUG);
+        _mollom_watchdog_multiple($messages, WATCHDOG_DEBUG);
         return $result;
       }
     }
@@ -1568,14 +1592,73 @@ function mollom($method, $data = array()
 
   // Report this error.
   $messages[] = array(
-    'text' => 'All servers unreachable or returning errors. The server list was emptied.',
+    'All servers unreachable or returning errors. The server list was emptied.' => array(),
   );
-  _mollom_watchdog($messages, WATCHDOG_ERROR);
+  _mollom_watchdog_multiple($messages, WATCHDOG_ERROR);
 
   return NETWORK_ERROR;
 }
 
 /**
+ * Log a Mollom system message.
+ *
+ * @param $parts
+ *   A list of message parts. Each item is an associative array whose keys are
+ *   log message strings and whose corresponding values are t()-style
+ *   replacement token arguments. At least one part is required.
+ * @param $severity
+ *   The severity of the message, as per RFC 3164. Possible values are
+ *   WATCHDOG_ERROR, WATCHDOG_WARNING, etc.
+ *
+ * @see watchdog()
+ */
+function _mollom_watchdog(array $parts, $severity = WATCHDOG_NOTICE) {
+  // First message part is required.
+  $message = key($parts);
+  $arguments = $parts[$message];
+  unset($parts[$message]);
+
+  // Hide further message details in the log overview table, if any.
+  // @see theme_dblog_message()
+  if ($parts) {
+    $message = str_pad($message, 56, ' ', STR_PAD_RIGHT);
+    $message .= '<br />';
+  }
+
+  // Each item in $parts is a part of the log message.
+  foreach ($parts as $string => $string_arguments) {
+    $message .= $string . "\n";
+    $arguments += $string_arguments;
+  }
+
+  // Prettify replacement token values, if possible.
+  foreach ($arguments as $token => $array) {
+    $flat_value = FALSE;
+    if (is_array($array)) {
+      $flat_value = '';
+      foreach ($array as $key => $value) {
+        if (is_array($value)) {
+          $flat_value = FALSE;
+          break;
+        }
+        $value = var_export($value, TRUE);
+        // Indent the new value, so there is a visual separation from the last.
+        $flat_value .= "  {$key} = {$value}\n";
+      }
+    }
+    // Only convert one-dimensional arrays, or we would lose debugging data.
+    if ($flat_value !== FALSE) {
+      $arguments[$token] = $flat_value;
+    }
+    else {
+      $arguments[$token] = var_export($array, TRUE);
+    }
+  }
+
+  watchdog('mollom', $message, $arguments, $severity);
+}
+
+/**
  * Helper function for mollom() to invoke watchdog() with cumulative messages.
  *
  * We do not want false errors to clutter the log, for example, when the server
@@ -1584,9 +1667,9 @@ function mollom($method, $data = array()
  * XML-RPC response with the entire stack of collected messages.
  * This is also required for tests to pass.
  */
-function _mollom_watchdog($messages, $severity) {
+function _mollom_watchdog_multiple($messages, $severity) {
   foreach ($messages as $message) {
-    watchdog('mollom', $message['text'], !empty($message['arguments']) ? $message['arguments'] : NULL, $severity);
+    _mollom_watchdog($message, $severity);
   }
 }
 
@@ -1650,9 +1733,8 @@ function _mollom_send_feedback($session_
     'session_id' => $session_id,
     'feedback' => $feedback,
   ));
-  watchdog('mollom', 'Reported session id %session as %feedback.', array(
-    '%session' => $session_id,
-    '%feedback' => $feedback,
+  _mollom_watchdog(array(
+    'Reported %feedback for session id %session.' => array('%session' => $session_id, '%feedback' => $feedback),
   ));
   return $result;
 }
