From 6b04e1f5b80abcc1dffbce0466f34a182a468064 Mon Sep 17 00:00:00 2001
From: "W. Trevor King" <wking@tremily.us>
Date: Thu, 23 Aug 2012 17:26:36 -0400
Subject: [PATCH] command:serve: add SilentRequestHandler to avoid
 double-logging requests.

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 | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/libbe/command/serve.py b/libbe/command/serve.py
index 09ff0ff..3bfac0c 100644
--- a/libbe/command/serve.py
+++ b/libbe/command/serve.py
@@ -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)
 
-- 
2.26.2