command:serve: add SilentRequestHandler to avoid double-logging requests.
authorW. Trevor King <wking@tremily.us>
Thu, 23 Aug 2012 21:26:36 +0000 (17:26 -0400)
committerW. Trevor King <wking@tremily.us>
Thu, 23 Aug 2012 21:31:15 +0000 (17:31 -0400)
They were being logged by the request handler, and then logged again
by WSGI_Object.log_request.  After this patch, requests are only
logged when logger.level is at a <= level (e.g. closer to DEBUG)
than the WSGI_Object.log_level (usually INFO).  For example, in
Serve_setup_logging,

  self.logger.setLevel(logging.INFO)

will get request logs printed, but

  self.logger.setLevel(logging.WARNING)

will not.

libbe/command/serve.py

index 09ff0fffec07c8aaf46ac84d635409e69b339011..3bfac0cfd6cad048a30e42021d39c8844ff0b5c6 100644 (file)
@@ -203,7 +203,7 @@ class WSGI_Object (object):
         return [message]
 
     def log_request(self, environ, status='-1 OK', bytes=-1):
-        if self.logger == None:
+        if self.logger is None or self.logger.level > self.log_level:
             return
         req_uri = urllib.quote(environ.get('SCRIPT_NAME', '')
                                + environ.get('PATH_INFO', ''))
@@ -744,6 +744,11 @@ class ServerApp (WSGI_AppObject):
         libbe.util.subproc.invoke(self.notify, stdin=message, shell=True)
 
 
+class SilentRequestHandler (wsgiref.simple_server.WSGIRequestHandler):
+    def log_message(self, format, *args):
+        pass
+
+
 class Serve (libbe.command.Command):
     """Serve bug directory storage over HTTP.
 
@@ -848,7 +853,8 @@ class Serve (libbe.command.Command):
         else:
             details['protocol'] = 'HTTP'
             server = wsgiref.simple_server.make_server(
-                params['host'], params['port'], app)
+                params['host'], params['port'], app,
+                handler_class=SilentRequestHandler)
             details['socket-name'] = server.socket.getsockname()[0]
         return (server, details)