[Checkins] SVN: zc.zservertracelog/branches/alex-tracelog-extensions/src/zc/zservertracelog/tracelog.py refactored the logger.

Alex Smith asmith at zope.com
Mon Sep 8 11:13:27 EDT 2008


Log message for revision 90950:
  
  refactored the logger.
  

Changed:
  U   zc.zservertracelog/branches/alex-tracelog-extensions/src/zc/zservertracelog/tracelog.py

-=-
Modified: zc.zservertracelog/branches/alex-tracelog-extensions/src/zc/zservertracelog/tracelog.py
===================================================================
--- zc.zservertracelog/branches/alex-tracelog-extensions/src/zc/zservertracelog/tracelog.py	2008-09-08 14:22:44 UTC (rev 90949)
+++ zc.zservertracelog/branches/alex-tracelog-extensions/src/zc/zservertracelog/tracelog.py	2008-09-08 15:13:26 UTC (rev 90950)
@@ -27,6 +27,14 @@
 import zope.server.http.httpserverchannel
 
 
+trace_points = {
+    'B': zc.zservertracelog.interfaces.ITraceRequestStart,
+    'I': zc.zservertracelog.interfaces.ITraceInputAcquired,
+    'C': zc.zservertracelog.interfaces.ITraceApplicationStart,
+    'A': zc.zservertracelog.interfaces.ITraceApplicationEnd,
+    'E': zc.zservertracelog.interfaces.ITraceRequestEnd,
+    }
+
 tracelog = logging.getLogger('zc.tracelog')
 
 
@@ -34,7 +42,15 @@
     return dt.replace(microsecond=0).isoformat()
 
 
+def _log(logger, trace_code, msg=None, timestamp=None):
+    logger.trace_code = trace_code
+    logger.extension_id = None
+    logger.log(msg, timestamp)
+    _run_trace_extensions(trace_points[trace_code], logger)
+
+
 def _run_trace_extensions(trace_point, logger):
+    logger.trace_code = 'X'
     tracers = zope.component.getUtilitiesFor(trace_point)
     for tname, tracer in tracers:
         logger.extension_id = tname
@@ -46,26 +62,24 @@
     zope.interface.implements(zc.zservertracelog.interfaces.ITraceLog)
 
     extension_id = None
+    trace_code = None
 
     def __init__(self, channel):
         self.channel_id = id(channel)
 
-    # this implementation adds the `trace_code` option which is meant to be
-    # used internally and not for use by extensions.
-    def log(
-        self, msg=None, timestamp=None, trace_code=None):
+    def log(self, msg=None, timestamp=None):
 
         if timestamp is None:
             timestamp = datetime.datetime.now()
 
-        if not trace_code:
-            trace_code = 'X'
+        if not self.trace_code:
+            self.trace_code = 'X'
 
-        if trace_code == 'X' and not self.extension_id:
+        if self.trace_code == 'X' and not self.extension_id:
             raise ValueError('Unnamed Tracelog Extension')
 
         entry = '%s %s %s' % (
-            trace_code, self.channel_id, _format_datetime(timestamp))
+            self.trace_code, self.channel_id, _format_datetime(timestamp))
 
         if self.extension_id:
             entry += ' %s' % self.extension_id
@@ -88,15 +102,8 @@
 
     def handle_request(self, parser):
         logger = TraceLog(self)
-        logger.log(
-            '%s %s' % (parser.command, parser.path),
-            parser.__B,
-            trace_code='B')
-        _run_trace_extensions(
-            zc.zservertracelog.interfaces.ITraceRequestStart, logger)
-        logger.log(str(parser.content_length), trace_code='I')
-        _run_trace_extensions(
-            zc.zservertracelog.interfaces.ITraceInputAcquired, logger)
+        _log(logger, 'B', '%s %s' % (parser.command, parser.path), parser.__B)
+        _log(logger, 'I', str(parser.content_length))
         zope.server.http.httpserverchannel.HTTPServerChannel.handle_request(
             self, parser)
 
@@ -112,9 +119,7 @@
     def executeRequest(self, task):
         """Overrides HTTPServer.executeRequest()."""
         logger = TraceLog(task.channel)
-        logger.log(trace_code='C')
-        _run_trace_extensions(
-            zc.zservertracelog.interfaces.ITraceApplicationStart, logger)
+        _log(logger, 'C')
         env = task.getCGIEnvironment()
         env['wsgi.input'] = task.request_data.getBodyStream()
 
@@ -131,12 +136,8 @@
         try:
             response = self.application(env, start_response)
         except Exception, v:
-            logger.log('Error: %s' % v, trace_code='A')
-            _run_trace_extensions(
-                zc.zservertracelog.interfaces.ITraceApplicationEnd, logger)
-            logger.log(trace_code='E')
-            _run_trace_extensions(
-                zc.zservertracelog.interfaces.ITraceRequestEnd, logger)
+            _log(logger, 'A', 'Error: %s' % v)
+            _log(logger, 'E')
             raise
         else:
             accumulated_headers = getattr(task, 'accumulated_headers') or ()
@@ -148,23 +149,15 @@
             else:
                 length = '?'
 
-            logger.log(
-                '%s %s' % (getattr(task, 'status', '?'), length),
-                trace_code='A')
-            _run_trace_extensions(
-                zc.zservertracelog.interfaces.ITraceApplicationEnd, logger)
+            _log(logger, 'A', '%s %s' % (getattr(task, 'status', '?'), length))
 
             try:
                 task.write(response)
             except Exception, v:
-                logger.log('Error: %s' % v, trace_code='E')
-                _run_trace_extensions(
-                    zc.zservertracelog.interfaces.ITraceRequestEnd, logger)
+                _log(logger, 'E', 'Error: %s' % v)
                 raise
             else:
-                logger.log(trace_code='E')
-                _run_trace_extensions(
-                    zc.zservertracelog.interfaces.ITraceRequestEnd, logger)
+                _log(logger, 'E')
 
 
 http = servertype.ServerType(



More information about the Checkins mailing list