[Zope-Checkins] SVN: Zope/branches/2.10/ Merge r96315 from trunk: copy entry_id to the event log too

Martijn Pieters mj at zopatista.com
Mon Feb 9 10:03:39 EST 2009


Log message for revision 96319:
  Merge r96315 from trunk: copy entry_id to the event log too
  

Changed:
  U   Zope/branches/2.10/doc/CHANGES.txt
  U   Zope/branches/2.10/lib/python/Products/SiteErrorLog/SiteErrorLog.py
  U   Zope/branches/2.10/lib/python/Products/SiteErrorLog/tests/testSiteErrorLog.py

-=-
Modified: Zope/branches/2.10/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.10/doc/CHANGES.txt	2009-02-09 14:59:06 UTC (rev 96318)
+++ Zope/branches/2.10/doc/CHANGES.txt	2009-02-09 15:03:38 UTC (rev 96319)
@@ -6,6 +6,14 @@
 
   Zope 2.10.8 (unreleased)
 
+    Features added
+
+      - SiteErrorLog now includes the entry id in the information copied to
+        the event log. This allowes you to correlate a user error report with
+        the event log after a restart, or let's you find the REQUEST
+        information in the SiteErrorLog when looking at a traceback in the
+        event log.
+
     Restructuring
 
       - Added 'InitializeClass' alias in 'App.class_init' to ease migration.

Modified: Zope/branches/2.10/lib/python/Products/SiteErrorLog/SiteErrorLog.py
===================================================================
--- Zope/branches/2.10/lib/python/Products/SiteErrorLog/SiteErrorLog.py	2009-02-09 14:59:06 UTC (rev 96318)
+++ Zope/branches/2.10/lib/python/Products/SiteErrorLog/SiteErrorLog.py	2009-02-09 15:03:38 UTC (rev 96319)
@@ -213,18 +213,18 @@
                 LOG.error('Error while logging', exc_info=sys.exc_info())
             else:
                 if self.copy_to_zlog:
-                    self._do_copy_to_zlog(now,strtype,str(url),tb_text)
+                    self._do_copy_to_zlog(now,strtype,entry_id,str(url),tb_text)
                 return '%s/showEntry?id=%s' % (self.absolute_url(), entry_id)
         finally:
             info = None
 
-    def _do_copy_to_zlog(self,now,strtype,url,tb_text):
+    def _do_copy_to_zlog(self,now,strtype,entry_id,url,tb_text):
         when = _rate_restrict_pool.get(strtype,0)
         if now>when:
             next_when = max(when, now-_rate_restrict_burst*_rate_restrict_period)
             next_when += _rate_restrict_period
             _rate_restrict_pool[strtype] = next_when
-            LOG.error('%s\n%s' % (url, tb_text.rstrip()))
+            LOG.error('%s %s\n%s' % (entry_id, url, tb_text.rstrip()))
 
     security.declareProtected(use_error_logging, 'getProperties')
     def getProperties(self):

Modified: Zope/branches/2.10/lib/python/Products/SiteErrorLog/tests/testSiteErrorLog.py
===================================================================
--- Zope/branches/2.10/lib/python/Products/SiteErrorLog/tests/testSiteErrorLog.py	2009-02-09 14:59:06 UTC (rev 96318)
+++ Zope/branches/2.10/lib/python/Products/SiteErrorLog/tests/testSiteErrorLog.py	2009-02-09 15:03:38 UTC (rev 96319)
@@ -14,6 +14,7 @@
 
 import sys
 import unittest
+import logging
 
 
 class SiteErrorLogTests(unittest.TestCase):
@@ -27,10 +28,18 @@
                 from Products.SiteErrorLog.SiteErrorLog import SiteErrorLog
                 self.app._setObject('error_log', SiteErrorLog())
             self.app.manage_addDTMLMethod('doc', '')
+            
+            self.logger = logging.getLogger('Zope.SiteErrorLog')
+            self.log = logging.handlers.BufferingHandler(sys.maxint)
+            self.logger.addHandler(self.log)
+            self.old_level = self.logger.level
+            self.logger.setLevel(logging.ERROR)
         except:
             self.tearDown()
 
     def tearDown(self):
+        self.logger.removeHandler(self.log)
+        self.logger.setLevel(self.old_level)
         transaction.abort()
         self.app._p_jar.close()
 
@@ -121,6 +130,22 @@
         # log entries
         self.assertEquals(len(sel_ob.getLogEntries()), previous_log_length)
 
+    def testEntryID(self):
+        elog = self.app.error_log
+
+        # Create a predictable error
+        try:
+            raise AttributeError, "DummyAttribute"
+        except AttributeError:
+            info = sys.exc_info()
+            elog.raising(info)
+
+        entries = elog.getLogEntries()
+        entry_id = entries[0]['id']
+
+        self.assertTrue(entry_id in self.log.buffer[-1].msg, 
+                        (entry_id, self.log.buffer[-1].msg))
+
     def testCleanup(self):
         # Need to make sure that the __error_log__ hook gets cleaned up
         self.app._delObject('error_log')



More information about the Zope-Checkins mailing list