From: W. Trevor King Date: Thu, 23 Aug 2012 21:26:36 +0000 (-0400) Subject: command:serve: add SilentRequestHandler to avoid double-logging requests. X-Git-Tag: 1.1.0~135 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=6b04e1f5b80abcc1dffbce0466f34a182a468064;p=be.git 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. --- 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)